게으른 평가가 linq Max 연산자와 어떤 관련이 있는지 이해하는 데 어려움이 있습니다. linq 최대 게으른 평가
이
내 코드입니다 : 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;
나는 다음과 같은 동작을 볼 수있는 코드를 단계별로 : L 후
에게 valB
표시 대상을 수행 valA = 0, valB = 0, valC = 0
valA
만
valB
후의 값을 표시 않는 이유
valA = 32, valB = 32, valC = 32
가 할당 valA = 32, valB = 0, valC = 0
라인 (3)이 실행되면
, 라인 (2)가 실행되면
, 왜 오프라인 실행 한 1 한 번 값 valC
이 할당 되었습니까?
다음은 제 디버거의 스크린 샷입니다. 내 IDE에 대해 비표준적인 것이 있어야 할 것 같아.
IDE image http://toastermagic.co.uk/images/linqMax.png
'Any'또는 'Max'가 즉시 실행됩니다. –
@TimSchmelter * 두 개의 *가 즉시 실행됩니다 ('Any'의 다른 오버로드가 지연 되더라도). – Servy
@Servy : 그것이 내가 말한 것입니다. 그 외에는 과부하가 연기됩니다. [** It **] (http://msdn.microsoft.com/en-us/library/bb534972.aspx)도 즉시 실행됩니다. 'foreach'에서 술어를 사용하고 요소 중 하나라도 true를 반환하면 true를 반환하고 그렇지 않으면 false를 반환합니다. –