初始化对象时的NullReferenceExn,但仅当存在Lambda表达式时(在C#中)

时间:2012-09-26 08:33:20

标签: c# lambda closures nullreferenceexception

我有以下奇怪的情况:Pair是包含WidgetInt32的值类型,GetNonNullWidget()返回特定的非空Widget }。 List<Pair> lstWidgetsAndNumbers是一个列表。

以下代码在初始化局部变量时抛出空引用异常

编辑:

Widget widgetX = null;        //this throws a NulLRefExn

widgetX = GetNonNullWidget();

var pairX = lstWidgetsAndNumbers.Find(pair => pair.First == widgetX);     //but only if this line exists.

VisulStudio2008中的本地窗口显示widgetX,带有红色警告和消息 “ '' 一片空白 ”。

如果我在方法中用lambda封装第三行,那么一切正常。

我清楚地理解lambdas甚至比我想象的还要少;任何人都可以解释这里发生了什么?谢谢!

编辑:

要明确:GetNonNullWidget()返回Widget,并且在调试时可以检查它是非空的。

1 个答案:

答案 0 :(得分:0)

The as operator should never throw a NullReferenceException,这就是为什么我根据您当前的描述相信调试器出了问题。

验证以下内容:

如果这一切都正确,请尝试下列一项或多项措施:

  • 重建您的解决方案。
  • 重新启动Visual Studio。