如果datarow(dr)中的列为null,我有以下代码似乎会爆炸。从数据行中解析出值并处理空值检查的正确方法是什么?
Person person = new Person()
{
FirstName = dr["FirstName"].ToString(),
LastName = dr["LastName"].ToString(),
BusinessPhoneNumber = dr["BusinessPhone"].ToString(),
答案 0 :(得分:10)
如果列的类型为string,但是可以为空,那么尝试:
// FirstName must allow null
FirstName = dr["FirstName"] as string
或
// FirstName would be empty for a NULL in the database
FirstName = (dr["FirstName"] as string) ?? string.Empty
答案 1 :(得分:4)
我相信,数据单元无效可能是您遇到问题的原因。也许该列不存在,或者发生任何其他错误,或者DataRow本身为null,您应该处理它。看看例外 - "似乎爆炸了#34;不是对您的问题的有效描述。
以下内容解释了这一点,但也会回答其他人的标题问题。
如果列值为null,则返回对象System.DBNull
,.ToString()
返回空字符串,而(string)
或as string
返回null
。
因此检查==null
的返回项目是没有意义的,因为它不会评估为true
。
DBNull
案例。null
,请将.ToString()
更改为as string
。if (dr.IsNull("FirstName"))
之后使用==null
或对目标变量执行as string
。答案 2 :(得分:2)
dr["FirstName"].ToString()
偶尔会抛出空指针异常,因为您尝试访问空对象上的ToString
。除此之外,字符串可以为null,所以实际上,如果你知道它是一个字符串,并且你不介意它是null,那么它是安全的
FirstName = (String) dr["FirstName"]
答案 3 :(得分:1)
将列和默认值传递给检查null的辅助函数,如果为null则返回默认值,如果不为null,则返回列值。
答案 4 :(得分:1)
如果列为null,则可以使用以下命令返回空白字符串。
FirstName = string.format("{0}", dr["FirstName"])