2016-09-21 40 views
1

我用下面的C#代码的工作:从哪里传递参数到PLINQ中使用的lambda表达式的参数?

//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 []数组的参数值。例如,如果参数“word”被传递值“word1”,则参数“index”被传递给wordToTest []数组中的“word1”的对应索引位置。我无法准确理解查询的哪一点(可能是内部的),这种提取以及将参数传递给lambda表达式会发生。如何提取wordsToTest []数组的数据及其索引位置并将其传递给lamba表达式的参数?什么导致这种提取?请在此澄清。谢谢。

回答

1

您是否听说过有关c#中的并行编程的内容?它只是与查询相同。查询与主要方法并行发生。

+0

谢谢。根据你的回答,我能够解决上述疑问。 –

1

“Select”方法是从源数组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) 

上面提到的选择()方法属于枚举类。详情请参阅下面提到的链接: https://msdn.microsoft.com/en-us/library/bb534869(v=vs.110).aspx

谢谢。

相关问题