我有这样的代码:

foreach (DataRow row in dataTable.Rows)
{
        if ((string)row["Forename"] != record.Forename)
        {
             // Do something
        }
}

效果很好,但是如果row["Forename"]是数据库中的null,则实际上它是DBNull,并且无法将DBNull转换为字符串,也无法在DBNullstring之间进行比较。有些值也是nullable<int>,它不能将DBNullint?进行比较

是否有一个帮助程序方法可以让我进行很好的比较,还是我必须自己编写一个扩展方法?

最佳答案

您可以使用 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);
    }
}

关于c# - 有没有一种比较可空的和dbnullable对象的巧妙方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23998901/

10-09 12:37