为什么Linq知道增加

时间:2015-09-29 12:02:40

标签: linq

我的印象,代码如

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个值。

1 个答案:

答案 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表示源元素的索引。