null值引用异常不一致

本文关键字:不一致 异常 引用 null | 更新日期: 2023-09-27 18:25:43

在尝试存储序列化类对象中的值时,我遇到了不一致的null值引用错误。

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

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

null值引用异常不一致

item也可能为空

current_location也可能为空,

不仅是CCD_ 4。

这将有助于

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 ...
}

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

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