以下代码引发空值异常
Record rec = (Record)obj.Records.Where(x => x.Id == no).SingleOrDefault();
有三个可能NullReferenceException
发生 a 的地方(编辑:我们现在知道Id
是 a int
):
obj.Records
如果obj
是null
Records.Where(...)
如果Records
是 null
x.Id
如果您的可枚举null
中有一个条目(即在该上下文中是) ,则在您的 lambda中。obj.Records
x
null
这是它不会的地方(假设它编译):
SingleOrDefault
如果有多个条目,只会抛出异常。如果没有,则返回null
引用类型或值类型的默认值。(Record)
铸件。由于没有编译器错误,我假设Record
是一个类。如果有一个值,它只会在它是无效强制转换(而不是空异常)时抛出异常。A(Record)null
对于引用类型完全有效。您应该调试并逐步找出导致异常的位置。
好吧,要么obj.Records
是,null
要么它没有找到任何记录。但这实际上也行不通x.Id == no
……除非当然no
是某个地方的变量。
将行更改为:
Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault() as Record;
看,default
for 类型将是null
. 此外,尽管我不完全了解您的代码,但上述行不能简单地是:
Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault();
不是类型Records
的列表Record
吗?