0

以下代码引发空值异常

Record rec = (Record)obj.Records.Where(x => x.Id == no).SingleOrDefault();
4

2 回答 2

4

有三个可能NullReferenceException发生 a 的地方(编辑:我们现在知道Id是 a int):

  1. obj.Records如果objnull
  2. Records.Where(...)如果Recordsnull
  3. x.Id如果您的可枚举null中有一个条目(即在该上下文中是) ,则在您的 lambda中。obj.Recordsxnull

这是它不会的地方(假设它编译):

  1. SingleOrDefault如果有多个条目,只会抛出异常。如果没有,则返回null引用类型或值类型的默认值。
  2. (Record)铸件。由于没有编译器错误,我假设Record是一个类。如果有一个值,它只会在它是无效强制转换(而不是空异常)时抛出异常。A(Record)null对于引用类型完全有效。

您应该调试并逐步找出导致异常的位置。

于 2013-07-31T12:24:16.407 回答
2

好吧,要么obj.Records是,null 要么它没有找到任何记录。但这实际上也行不通x.Id == no……除非当然no是某个地方的变量。

将行更改为:

Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault() as Record;

看,defaultfor 类型将是null. 此外,尽管不完全了解您的代码,但上述行不能简单地是:

Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault();

不是类型Records的列表Record吗?

于 2013-07-31T12:17:37.623 回答