String.IsNullOrEmpty 检查数据 Table 单元格

String.IsNullOrEmpty check with Data Table cell

如果我有一个数据 Table 并且我想查看特定单元格中包含的值是否为空,我会使用它。

foreach(DataRow row in DataTable.Rows)
{
    bool isEmpty = String.IsNullOrEmpty(row["MyColumn"].ToString());
}

但是如果 row["MyColumn"] 中的值是 null 会发生什么。 .ToString() 不会抛出异常吗?然而,当我尝试以下 ..

bool isEmpty = String.IsNullOrEmpty(row["MyColumn"]);

我收到无效参数异常,因为 IsNullOrEmpty() 方法正在查找字符串对象。

那么检查数据 Table 中的特定单元格是否为空或 null 的正确方法是什么?

将你的陈述改为这样,

bool isEmpty = String.IsNullOrEmpty(row["MyColumn"]?.ToString());

?。意味着 运行 进程 .ToString() 仅当行["MyColumn"] 不为空时。

基本上只是为了完整性而添加这个...但是如果出于某种原因你没有使用 C# 6 或更高版本,你总是可以这样做"old fashioned way":

bool isEmpty = row["MyColumn"] == null || string.IsNullOrEmpty(row["MyColumn"].ToString());

您可以改为使用 DataRow:

Field<T>() 方法
bool isEmpty = String.IsNullOrEmpty(row.Field<string>("MyColumn")); 

这提供了对行值的强类型访问。

您也可以将它与其他类型一起使用,因此无需解析 intDataTime,例如。

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) 
{
    ...
}