c# - Lambda 表达式和可空类型

标签 c# linq lambda

我有两个代码示例。一个工作并返回正确的结果,一个抛出空引用异常。有什么不同?我知道为 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();

最佳答案

第一个实例根据 xbool isXNull = !x.HasValue; 执行时的值计算 isXNull,而第二个在 return result2.ToList(); 执行时使用 x 的值。不过,不清楚您是如何获得空引用异常的,因为我没有看到任何引用。

关于c# - Lambda 表达式和可空类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2941242/

相关文章:

javascript - 根据其值更改文本框宽度

c# - 我可以使用事件在应用程序之间发送信号吗?

c# - 使用Linq查找满足特定条件的矩阵的所有索引

c# - 从反射转向表达式树

C# 7 元组和 lambda

c# - Unity防止点击1s

c# - 用另一个列表更新一个列表所需的最少代码量是多少?

c# - 如何使用 LINQ 填充类中的集合?

c# - 嵌套类的 LINQ 查询

c# - 如何在 Lambda LINQ 中排除属性而不是选择