如果我有一个数据表,我想查看特定单元格中包含的值是否为空,我会使用它。
foreach(DataRow row in DataTable.Rows)
{
bool isEmpty = String.IsNullOrEmpty(row["MyColumn"].ToString());
}
但是如果row["MyColumn"]
中的值null
会发生什么。.ToString()
不会抛出一个例外吗?然而,当我尝试以下方法时..
bool isEmpty = String.IsNullOrEmpty(row["MyColumn"]);
我收到一个无效的参数异常,因为IsNullOrEmpty()
方法正在寻找一个字符串对象。
那么,检查数据表中的特定单元格是空还是空的正确方法是什么?
将您的陈述更改为此语句,
bool isEmpty = String.IsNullOrEmpty(row["MyColumn"]?.ToString());
?. 表示运行进程。ToString(( 仅当 row["MyColumn"] 不为空时。
基本上只是为了完整起见而添加这个......但是,如果由于某种原因您没有使用 C# 6 或更高版本,则始终可以使用"老式方式":
bool isEmpty = row["MyColumn"] == null || string.IsNullOrEmpty(row["MyColumn"].ToString());
你可以改用DataRow
的Field<T>()
方法:
bool isEmpty = String.IsNullOrEmpty(row.Field<string>("MyColumn"));
这提供了对行值的强类型访问。
您也可以将其与其他类型一起使用,因此无需解析int
或DataTime
,例如。
var myDate = row.Field<DateTime>("MyDate"); // DateTime
var myInt = row.Field<int>("MyInt"); // int
它还适用于nullable
类型:
var myDate = row.Field<DateTime?>("MyDate"); // DateTime? (Nullable)
if (myDate.HasValue)
{
...
}