Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空引用异常的奇数位置_C# - Fatal编程技术网

C# 空引用异常的奇数位置

C# 空引用异常的奇数位置,c#,C#,我有以下代码片段: 1. var x = item.Current.DeepProperty; 2. var current = item.Current as IFoo; 3. if (current == null) 4. continue 5. var y = item.Bar.Baz 我在第3行上得到运行时空引用异常 有人能解释为什么吗 我有正确的PDB,程序集是在发布模式下编译的,并启用了优化 更新我发布了一个未优化的版本,发现抛出的是第5行 谢谢,第3行无法触发空引用异常。发

我有以下代码片段:

1. var x = item.Current.DeepProperty;
2. var current = item.Current as IFoo;
3. if (current == null)
4.    continue
5. var y = item.Bar.Baz
我在
第3行
上得到运行时
空引用异常

有人能解释为什么吗

我有正确的PDB,程序集是在发布模式下编译的,并启用了优化

更新我发布了一个未优化的版本,发现抛出的是第5行


谢谢,第3行无法触发空引用异常。发布版本正在优化代码,从而更改行号。如果
item
item.Current
null
则会出现该异常

然而,优化器通常会从构建中删除行,因此异常更可能来自后面的行


为了找到确切的源代码,您需要在调试版本中重现错误。或者添加更多空检查和日志记录。

第3行无法触发空引用异常。发布版本正在优化代码,从而更改行号。如果
item
item.Current
null
则会出现该异常

然而,优化器通常会从构建中删除行,因此异常更可能来自后面的行


为了找到确切的源代码,您需要在调试版本中重现错误。或者添加更多的空检查和日志记录。

好吧,在发布模式下,无法保证执行的代码与您编写的代码完全一致;在启用优化时,将调试信息视为更多的指导原则。在本例中,异常几乎可以肯定是由于第2行的
item.Current
引起的。我昨天在java应用程序中遇到了一个非常类似的问题——检查null行上的NullPointerException。我将继续关注这一点——谁知道呢,答案可能会对我的问题有所帮助。@Cameron,如果
item.Current
是问题所在,那么异常在到达第2行之前不会从第1行抛出吗?看着你的问题标题,我想不出你在“NRE”上说的是什么。你能编辑一下吗?没有问题的主体作为上下文是没有意义的。@Brian:Oops,你当然是对的(除非有奇怪的诡计,
item.Current
每次访问时都会更改值)。不过,仔细想想,编译器/JITer可以轻松地对这两行代码重新排序……好吧,在发布模式下,无法保证执行的代码与您编写的代码完全一致;在启用优化时,将调试信息视为更多的指导原则。在本例中,异常几乎可以肯定是由于第2行的
item.Current
引起的。我昨天在java应用程序中遇到了一个非常类似的问题——检查null行上的NullPointerException。我将继续关注这一点——谁知道呢,答案可能会对我的问题有所帮助。@Cameron,如果
item.Current
是问题所在,那么异常在到达第2行之前不会从第1行抛出吗?看着你的问题标题,我想不出你在“NRE”上说的是什么。你能编辑一下吗?没有问题的主体作为上下文是没有意义的。@Brian:Oops,你当然是对的(除非有奇怪的诡计,
item.Current
每次访问时都会更改值)。不过,仔细想想,编译器/JITer可以很容易地对这两行进行重新排序……因此推测它的第1行正在抛出。优化器可能对我的代码做了什么导致了这种结果?==运算符的糟糕实现不可能导致第3行出现NRE吗?只要生成的代码是等效的,优化器几乎可以做任何它想做的事情。没有办法从你发布的片段中分辨出来。正如注释中所建议的,在发布模式中将行号视为一个粗略的指导原则。@Rawling运算符可以抛出该异常,但该异常将来源于运算符代码,而不是调用代码(除非优化器决定内联运算符代码,这似乎很奇怪),因此推测它的第1行正在抛出。优化器可能对我的代码做了什么导致了这种结果?==运算符的糟糕实现不可能导致第3行出现NRE吗?只要生成的代码是等效的,优化器几乎可以做任何它想做的事情。没有办法从你发布的片段中分辨出来。正如注释中所建议的,在发布模式中将行号视为一个粗略的指导原则。@Rawling运算符可以引发该异常,但该异常将来源于运算符代码,而不是调用代码(除非优化器决定内联运算符代码,这似乎很奇怪)