我在这个LINQ查询中遇到一个不寻常的“NullReferenceException未被用户代码处理”错误:
List<UDIDInfo> d2Android = d2.Where(x.DeviceOS == (byte)DeviceOS.Android).ToList();
我继续并添加了空检查,但仍然收到错误
List<UDIDInfo> d2Android = d2.Where(x => x.DeviceOS != null && x.DeviceOS == (byte)DeviceOS.Android).ToList();
请注意,(byte)DeviceOS.Android
和d2
都不为空
编辑(解决方案):
List<UDIDInfo> d2Android = d2.Where(x => x != null && x.DeviceOS != null && x.DeviceOS == (byte)DeviceOS.Android).ToList();
答案 0 :(得分:7)
如果x
为空,该怎么办?也就是说,可枚举的d2
包含null
项。
尝试以下方法。你不应该得到任何空引用异常。
List<UDIDInfo> d2Android = d2
.Where(x => x != null)
.Where(x => x.DeviceOS != null)
.Where(x => x.DeviceOS == (byte)DeviceOS.Android)
.ToList();
答案 1 :(得分:0)
避免 LINQ 中的参数 null 异常,如下所示
Summaries = (from r in Summaries
where r.Contains(SearchTerm)
orderby r
select r).ToArray();
在这种情况下,如果 null 传递给 searchTerm,您可以检查如下所示的 null 表达式
Summaries = (from r in Summaries
where string.IsNullOrEmpty(SearchTerm) ||r.Contains(SearchTerm)
orderby r
select r).ToArray();