加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 有一种比较可空和可以为空的对象的简洁方法吗?

发布时间:2020-12-15 08:45:05 所属栏目:百科 来源:网络整理
导读:我有这样的代码: foreach (DataRow row in dataTable.Rows){ if ((string)row["Forename"] != record.Forename) { // Do something }} 工作得很好,但是如果数据库中的row [“Forename”]为空,那么它实际上是DBNull,它不能将DBNull转换为字符串,或者执行DBNu
我有这样的代码:
foreach (DataRow row in dataTable.Rows)
{
        if ((string)row["Forename"] != record.Forename)
        { 
             // Do something
        }
}

工作得很好,但是如果数据库中的row [“Forename”]为空,那么它实际上是DBNull,它不能将DBNull转换为字符串,或者执行DBNull和string之间的比较.有些值也是可以为空的< int>,它无法将DBNull与int进行比较?

有没有帮助方法让我做好比较,还是我必须自己写一个扩展方法?

解决方法

您可以使用支持可空类型的 DataRow.Field扩展方法:
foreach (DataRow row in dataTable.Rows)
{
    int? id = row.Field<int?>("ID");
    if(id.HasValue)
    {
        Console.Write("ID: " + id.Value);
    }
}

由于string是引用类型,因此默认情况下它将为null.您可以使用DataRow.IsNull来检查它是否是DBNull.Value:

foreach (DataRow row in dataTable.Rows)
{
    if(row.IsNull("Forename"))
    {
        // ...
    } 
    else
    {
        string foreName = row.Field<string>("Forename");
        Console.Write("ForeName: " + foreName);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读