是否有一种比较可空和可以为空的对象的简洁方法?

Nib*_*Pig 6 c#

我有这样的代码:

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

伟大的作品,但如果row["Forename"]null在数据库中,它实际上是DBNull在这里,它不能施放DBNull为一个字符串,或执行之间的比较DBNullstring.一些值也是nullable<int>,它不能比较DBNullint?

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

Tim*_*ter 5

您可以使用DataRow.Field支持可空类型的扩展方法:

foreach (DataRow row in dataTable.Rows)
{
    int? id = row.Field<int?>("ID");
    if(id.HasValue)
    {
        Console.Write("ID: " + id.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

由于它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);
    }
}
Run Code Online (Sandbox Code Playgroud)