不一致的空值引用异常

时间:2012-02-25 17:02:16

标签: c# asp.net nullreferenceexception

当我尝试从序列化类对象中存储我的值时,我面临不一致的空值引用错误。

if ( item.current_location.city!=null )
{
    var city = item.current_location.city.Select(i => i.ToString());
}

在上面的代码片段中,即使item数组中的任何索引具有空值,也会成功插入。但它在某些情况下抛出异常,我认为不能以任何方式区分其他情况(当值为空时)

2 个答案:

答案 0 :(得分:5)

item也可以为空

current_location也可以为空,

不仅city

这会有所帮助

if (item != null && 
    item.current_location != null && 
    item.current_location.city != null) {
    ...
} 

编辑:

注意:此代码有效,因为c#实现了对布尔表达式的所谓快捷方式评估。如果item应为null,则不会评估表达式的其余部分。如果item.current_location应为null,则不会评估最后一个字词。


(我在上面的代码中看不到任何插入内容。)


从C#6.0开始,您可以使用空传播运算符(?):

var city = item?.current_location?.city?.Select(i => i.ToString());
if (city != null) {
     // use city ...
}

答案 1 :(得分:0)

如果没有看到您的数据集,我无法给出明确的答案,但您不会检查项目对象或current_location对象上的空值。我建议你先把测试改为:

if (null != item && null != item.current_location && null != item.current_location.city)
{
...
}