从这里将参数传递给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表达式的参数?是什么导致了这种脱牙?请澄清一下。谢谢你!
你听说过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
谢谢。