2011-01-29 3 views
4

아래 예제의 index은 어떻게 값을 구합니까?값이 주어진 람다 식의 변수는 어떻게됩니까

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 
var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index); 

TakeWhile의 서명은 다음과 같습니다 :

public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate); 
+0

당신이 그것을 잘 입력되는 밖으로 작동, 또는 인덱스의 의미는 무엇 방법을 묻는/방법'TakeWhile' 정의된다 ? – delnan

+0

@delnan : 나는 람다에 대한 일반적인 질문을하고 있다고 생각했지만 응답을 토대로 필자는 TakeWhile이 람다를 어떻게 사용하고 있는지에 대해 정말로 질문하고있었습니다. 나는 n의 타입이 숫자의 멤버의 타입으로부터 유추 될 수 있고 인덱스의 타입은 Func 에 의해 정의된다는 것을 이해한다. – Bill

답변

4
나는 의미가 분명하지만, 나는 인덱스 값을 부여하는 방법을 볼 수 없습니다, n은 자동으로 소스 numbers에서 얻은 것을 이해하지만,

이 버전의 TakeWhile은 시퀀스의 소스 요소 색인을 술어의 두 번째 매개 변수로 제공합니다. 나는. 술어는 술어 (5, 0), 술어 (4, 1), 술어 (1, 2), 술어 (3, 3) 등으로 호출됩니다. the MSDN documentation을 참조하십시오.

시퀀스의 값만 제공하는 "더 간단한"버전의 함수도 있습니다 (MSDN 참조).

+0

고마워. 내 질문을 게시 한 후 TakeWhile 인덱스 값을 제공해야합니다. 나는 제공된 값 및 유추 사용 일반적으로 유추 된 값을 구문 분석하는 데 점점 익숙해지고있다. – Bill

2

색인은 TakeWhile의 구현으로 생성되며 this과 약간 다를 수 있습니다.

1

것들로 당신이 TakeWhile이 구현 될 수있는 방법을 알아 내기로 취소 될 :

public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate) 
{ 
    int index = 0; 
    foreach (TSource item in source) 
    { 
     if (predicate(item, index)) 
     { 
      yield return item; 
     } 
     else 
     { 
      yield break; 
     } 
     index++; 
    } 
} 
관련 문제