先看代码

1  double? Result = PeopleList.Sum(r => (r.Height ?? 0) / r.Width);

这里, r.Height 和 r.Width 都是 double? 类型。 如果 r.Width 有为null的情况,那结果会是什么呢?

再看个代码

double? result = 0.0d;
foreach (var r in PeopleList) { result += (r.Height ?? 0)/r.Width; }

这两种表达方式看起来没什么区别。但是在VS2010 .Net 4.0 的编译环境下。 如果 r.Width有为null的情况,第一段代码结果是 0.0d, 而相同情况下第二段代码结果为 Null .

为何如此? 我想是系统优化造成编译Lambda表达式的时候,先做了除的操作再进行是不是null的判断,和表面看上去的逻辑完全不同。这点要注意。

相关文章:

  • 2021-10-16
  • 2021-07-10
  • 2021-12-25
  • 2021-08-20
  • 2021-12-27
  • 2021-09-20
  • 2021-08-27
猜你喜欢
  • 2021-08-03
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-05
  • 2021-05-26
  • 2021-04-04
相关资源
相似解决方案