我的印象,代码如
var result = myList.Select(a => a == "Hello")
与
相同public string Select(string a)
{
//logic
}
因此,如果我做了
var result = myList.Select((a, v) => a == "Hello")
它会'翻译'到
public string Select(string a, object v)
{
//logic
}
我认为我的逻辑错了,因为如果你考虑
var index = myList.Select((val, ind) => new { val, ind }).Single(a => a.v.Thing == "Condition").ind;
然后返回索引。它已经有效地完成了
public string Select(this List<string> s, string val, int ind)
{
//for loop, and keep track of the iteration
}
但Linq怎么知道我的第二个值是迭代?当然,它只知道我传递了2个值。
答案 0 :(得分:0)
选择更像投影的作品。当你分解你的第二个例子时,它可能会更清楚:
var index = myList // a list of strings or, more general, an enumerable of string
.Select((val, ind) => new { val, ind }) // enumerable of anon. type with val and index
.Single(a => a.v.Thing == "Condition") // any element of enumerable matching condition
.ind; // the index of this element
第二个可选参数只是一个计数器。如果你愿意的话,那就是传统的&#39;使用for循环它将是你的索引。这有时派上用场(如你的例子),但我很少使用它。请见MSDN:
selector类型:System.Func转换 函数应用于每个源元素;第二个参数 function表示源元素的索引。