从这里将参数传递给PLINQ中使用的lambda表达式的参数

本文关键字:lambda 表达式 参数 这里 参数传递 PLINQ | 更新日期: 2023-09-27 18:08:03

我正在使用下面的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 0word2 1

问题:以上代码运行良好。在执行代码时,"Select"查询操作符中的lamba表达式返回一个自定义结构体"IndexedWord"的实例。表达式的参数接收来自wordToTest[]数组的参数值。例如,如果传递给参数"word"的值是"word1",那么传递给参数"index"的是"word1"在wordToTest[]数组中对应的索引位置。我无法确切地理解在查询的哪一点(可能是内部)发生了这种提取并将参数传递给lambda表达式。如何提取wordsToTest[]数组的数据及其索引位置并将其传递给lambda表达式的参数?是什么导致了这种脱牙?请澄清一下。谢谢你!

从这里将参数传递给PLINQ中使用的lambda表达式的参数

你听说过c#中的并行编程吗?这是一样的,只是有查询。该查询与主方法并行执行。

"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)

上面提到的Select()方法属于Enumerable类。欲知详情,请参阅以下连结:https://msdn.microsoft.com/en-us/library/bb534869 (v = vs.110) . aspx

谢谢。