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;
}
}
使用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()