我有两个代码示例。一个工作并返回正确的结果,一个抛出空引用异常。有什么不同?我知道为 lambda 表达式捕获变量会发生一些神奇的事情,但我不明白这里的幕后发生了什么。
int? x = null;
bool isXNull = !x.HasValue;
// this works
var result = from p in data.Program
where (isXNull)
select p;
return result.Tolist();
// this doesn't
var result2 = from p in data.Program
where (!x.HasValue)
select p;
return result2.ToList();
最佳答案
第一个实例根据 x
行 bool isXNull = !x.HasValue;
执行时的值计算 isXNull
,而第二个在 return result2.ToList();
执行时使用 x
的值。不过,不清楚您是如何获得空引用异常的,因为我没有看到任何引用。
关于c# - Lambda 表达式和可空类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2941242/