如果数据行(dr)中的列为空,我有以下代码似乎会爆炸。从数据行中解析出值并处理空检查的正确方法是什么?
Person person = new Person()
{
FirstName = dr["FirstName"].ToString(),
LastName = dr["LastName"].ToString(),
BusinessPhoneNumber = dr["BusinessPhone"].ToString(),
如果列是字符串类型,但可以为空,那么尝试一下:
// 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
我相信,数据单元格为空不能成为您问题的原因。也许该列不存在,或者发生了任何其他错误,或者 DataRow 本身为空,您应该处理它。查看异常 - “似乎爆炸”不是对您的问题的有效描述。
以下解释了这一点,但也会为其他所有人回答标题中的问题。
如果列值为 null,System.DBNull
则返回一个对象,并.ToString()
返回一个空字符串,while(string)
或as string
return null
。
所以检查返回的项目是没有意义的,==null
因为它永远不会评估为true
.
DBNull
情况。null
,请更改.ToString()
为as string
。if (dr.IsNull("FirstName"))
请==null
在as string
.dr["FirstName"].ToString()
偶尔会抛出空指针异常,因为您试图访问ToString
空对象。除此之外,字符串可以为空,所以说真的,如果你知道它是一个字符串,并且你不介意它是空的,那么这样做是安全的
FirstName = (String) dr["FirstName"]
将列和默认值传递给辅助函数,该函数检查是否为 null,如果为 null,则返回默认值,如果不为 null,则返回列值。
如果列为空,您可以使用以下内容返回空白字符串。
FirstName = string.format("{0}", dr["FirstName"])