我在理解惰性求值与 linq Max 运算符之间的关系时遇到了一些麻烦。
这是我的代码:
var someList = new List<someType>
{
new someType { decimalValue = 32 }
};
line1: var valA = someList.Any() ? someList.Max(s => s.decimalValue) : 0.0M;
line2: var valB = someList.Any() ? someList.Max(s => s.decimalValue) : 0.0M;
line3: var valC = valB;
单步执行代码时,我看到以下行为:
第 1 行执行后,valA = 0, valB = 0, valC = 0
在第 2 行执行后,valA = 32, valB = 0, valC = 0
第 3 行执行后,valA = 32, valB = 32, valC = 32
为什么分配valA
后只显示一个值valB
,为什么valB
只显示一个值valC
分配一次?
下面是我的调试器的截图。我想我的 IDE 一定有一些非标准的东西。
(来源:toastermagic.co.uk)