2016-09-21 10 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式は、カスタム構造体 "IndexedWord"のインスタンスを返します。式のパラメータは、wordToTest [] arrayから引数の値を受け取ります。たとえば、パラメータ "word"に値 "word1"が渡された場合、パラメータ "index"はwordToTest []配列の対応する "word1"のインデックス位置に渡されます。私は、クエリーのどの時点で(内部的にも)クエリーの抽出とラムダ式への引数の引き渡しが正確に理解できません。 wordsToTest []配列のデータとそのインデックス位置はどのように抽出され、lamba式のパラメータに渡されますか?この抽出の原因は何ですか?親切にこれを明らかにする。ありがとうございました。

答えて

1

C#で並列プログラミングについて聞いたことがありますか?クエリとのみ同じです。クエリは、メインメソッドと並行して行われます。

+0

ありがとうございます。あなたの答えに基づいて、私は上記の疑問を解決することができました。 –

1

「選択」メソッドは、ソース配列wordsToTest []から各データ値とそれぞれのインデックス値を抽出するメソッドです。

関数コール:

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

は、コンストラクタを呼び出します:上記は、Select()メソッドを列挙クラスに属する言及

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

。詳細については、下記リンクをご参照ください。 https://msdn.microsoft.com/en-us/library/bb534869(v=vs.110).aspx

ありがとうございます。

関連する問題