当我尝试从序列化类对象中存储我的值时,我面临不一致的空值引用错误。
if ( item.current_location.city!=null )
{
var city = item.current_location.city.Select(i => i.ToString());
}
在上面的代码片段中,即使item
数组中的任何索引具有空值,也会成功插入。但它在某些情况下抛出异常,我认为不能以任何方式区分其他情况(当值为空时)
答案 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)
{
...
}