2012-07-04 4 views
1

다음 코드는 이름이 해당 값보다 짧은 자릿수를 제공합니다. LINQ가 인덱스가 요소의 배열 인덱스 여야한다는 것을 어떻게 이해하는지 이해할 수 없습니다. 누군가가 ...Mutli 매개 변수 Linq 쿼리

string[] digits = { "zero", "one", "two", "three", "four", 
        "five", "six", "seven", "eight", "nine" }; 

var shortDigits = digits.Where((digit, index) => digit.Length < index); 
+0

질문을 이해할 수 있는지 모르겠지만 우연의 일치를 설명하는 것 같아요. 배열의 문자열을 변경하면 이해가 덜 어려울 수 있습니다. – Jodrell

답변

3

나를 설명 할 수 내가 LINQ가 인덱스 요소의 배열 인덱스해야 이해하는 방법을 이해할 수 없습니다.

항상 the overload which takes a predicate which is given the value and the index입니다. 그것이 과부하의 목적입니다. predicate 파라미터 용 문서에서

:

상태에 대한 각각의 소스 요소를 테스트하는 기능; 함수의 두 번째 매개 변수는 소스 요소의 인덱스를 나타냅니다.

0

마술은 없습니다. Where이 특정 과부하이 내부적으로 같은 것을 수행합니다

predicate
var index = 0; 
foreach (var item in collection) 
{ 
    if (predicate(item, index++)) { 
     yield return item; 
    } 
} 

당신이 전달하고 collection이 숫자의 배열 람다이다.