Handling null with?

本文关键字:with null Handling | 更新日期: 2023-09-27 18:07:01

嗨,我得到以下错误信息时,试图处理一个空值使用??联合运营商,知道为什么吗?

无法将类型System.DBNull的对象强制转换为类型System.String

using(SqlDataReader rMemo = cmdUMemo.ExecuteReader())
{
      while (rMemo.Read())
      {                        
           String Title = (String)rMemo["UpdateTitle"] ?? "";
           lblUTitle.Text = Title;
      }
}

Handling null with?

使用as关键词:

String Title = rMemo["UpdateTitle"] as String ?? "";

DBNull类型不能显式地转换为字符串,但是as关键字将尝试进行转换,如果失败,返回null。然后使用??运算符将null合并到""

比较DBNull。值并返回空字符串,如:

 String Title = rMemo["UpdateTitle"] == DBNull.Value ? "" :
                                           rMemo["UpdateTitle"].ToString();

另一种方法可以使用Convert.ToString,它将为DBNull.Value返回空字符串

String Title = Convert.ToString(rMemo["UpdateTitle"]);

记住DBNull.Value.ToString()表示一个空字符串。因此,您可以检查返回的行是否具有列UpdateTitle,然后调用Convert.ToString,如:

string Title = rMemo["UpdateTitle"] != null ? Convert.ToString(rMemo["UpdateTitle"]) 
                                              : "";

null值应用Convert.ToString将返回null而不是空字符串。

处理这个问题的一个很好的简单方法是编写一个扩展方法,然后可以在任何地方使用:

public static class ObjectExtensions
{
    public String ToStringOrEmpty(this object obj)
    {
        if(obj == null)
           return String.Empty;
        return obj.ToString();
    } 
}

然后你可以简单地像这样调用它,使你的代码更漂亮和可读:

String Title = rMemo["UpdateTitle"].ToStringOrEmpty()