2016-09-21 7 views
1

:여기서 인수는 PLINQ 내에서 사용되는 람다 식의 매개 변수로 전달됩니까? 나는 아래의 C# 코드로 일하고

//Custom structure 
    struct IndexedWord 
    { 
     public string Word; 
     public int Index; 
    } 

    static void Main(string[] args) 
    { 

     string[] wordsToTest = {"word1", "word2"}; 

     var query = wordsToTest 
        .AsParallel() 
        .Select((word, index) => 
        new IndexedWord {Word = word, Index = index});  

     foreach(var structs in query) 
     { 
      Console.WriteLine("{0},{1}", structs.Word,structs.Index); 
     } 

     Console.WriteLine(); 
     Console.ReadKey();         
    } 

// 출력 word1,0 word2,1

질문 : 코드 위는 잘 작동합니다. 코드를 실행하면 "Select"쿼리 연산자 내의 lamba식이 사용자 지정 struct "IndexedWord"의 인스턴스를 반환합니다. 표현식의 매개 변수는 wordToTest [] 배열에서 인수 값을받습니다. 예를 들어, "word"매개 변수에 "word1"값이 전달되면 "index"매개 변수에 wordToTest [] 배열의 "word1"에 해당하는 인덱스 위치가 전달됩니다. Im은 질의의 어느 지점에서 (내부적으로도) 람다 표현에 대한 인수의 추출과 전달이 정확히 발생 하는지를 이해할 수 없다. wordsToTest [] 배열의 데이터와 인덱스 위치는 어떻게 추출되어 lamba 표현식의 매개 변수로 전달됩니까? 이 추출의 원인은 무엇입니까? 이 사실을 분명히 밝힙니다. 고맙습니다.

답변

1

C#으로 병렬 프로그래밍에 대해 들었습니까? 쿼리만으로도 동일합니다. 쿼리는 main 메소드와 병렬로 발생합니다.

+0

고맙습니다. 당신의 대답을 바탕으로, 나는 위의 의심을 해결할 수있었습니다. –

1

"선택"방법은 소스 배열 wordsToTest []에서 각 데이터 값과 해당 색인 값을 추출하는 방법입니다.

함수 호출 :

wordsToTest.Select((word, index) => 
        new IndexedWord { Word = word, Index = index }); 

생성자를 호출이 :

public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source, 
Func<TSource, int, TResult> selector) 

위에서 언급 선택() 메소드는 Enumerable에서 클래스에 속한다. 자세한 내용은 아래 링크를 참조하십시오. https://msdn.microsoft.com/en-us/library/bb534869(v=vs.110).aspx

감사합니다.