LINQ查询中的NullReferenceException

时间:2013-11-06 20:14:43

标签: c# linq nullreferenceexception

我在这个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.Androidd2都不为空

编辑(解决方案):

List<UDIDInfo> d2Android = d2.Where(x => x != null && x.DeviceOS != null && x.DeviceOS == (byte)DeviceOS.Android).ToList();

2 个答案:

答案 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();