【问题标题】:String.IsNullOrEmpty check with Data Table cellString.IsNullOrEmpty 检查数据表单元格
【发布时间】:2020-02-05 21:23:09
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 您使用的是什么版本的 C#?如果是 C# 6 或更高版本,您可以访问 null 条件 (?.) 运算符
  • 这是我正在运行的编译器版本。 '4.0.30319.42000'.

标签: c# null isnullorempty


【解决方案1】:

把你的陈述改成这样,

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

?。表示仅当 row["MyColumn"] 不为 null 时才运行进程 .ToString()。

【讨论】:

  • 数据表单元格的数据类型是否已经是nullable type?如果我使用的是旧版本的编译器(不支持nullable types),我将如何完成同样的事情?我的编译器版本是 4.0.30319.42000。编辑:看起来@Broots 回答了我的问题。
  • 它不必为空才能使用?.。如果结果数据为空,?. 表示不再处理结果上的任何方法,因为它将以“对象引用未设置为方法的实例”结束。
  • 我明白了。所以是不是真的依赖nullable type支持?
  • 它只检查 value == null。不用写 value == null ? null : somethingelse,您可以使用合并语句:value?.somethingelse
【解决方案2】:

基本上只是为了完整性而添加它......但如果由于某种原因你没有使用 C# 6 或更高版本,你总是可以用“老式方式”来做:

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

【讨论】:

  • 感谢您在我的编译器版本中没有 nullable types 的情况下添加此内容
【解决方案3】:

您可以改用DataRowField<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) 
{
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多