寻找银弹

致力于探寻软件开发中的本质问题

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  先看代码

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

posted on 2013-03-26 13:20  hchlee  阅读(145)  评论(0编辑  收藏  举报