现在的位置: 首页 > 综合 > 正文

使用Lambda Expression的时候要注意非预期的系统优化

2012年09月11日 ⁄ 综合 ⁄ 共 362字 ⁄ 字号 评论关闭

  先看代码

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的判断,和表面看上去的逻辑完全不同。这点要注意。

抱歉!评论已关闭.