如何在C#中获得一个值代表一个foreach循环的当前迭代?
例如,目前现在我需要根据我的情况做这样的事情:
int i=0;
foreach (Object o in collection)
{
// ...
i++;
}
解决方案:
foreach (var item in Model.Select((value, i) => new { i, value }))
{
var value = item.value;
var index = item.i;
}
这通过使用Linq的这个重载获得item(item.value)
和它的index(item.i):Select
函数[select]
中的第二个参数表示源元素的索引。
该new { i, value }
是创建一个新的匿名对象。
该foreach是遍历实现集合IEnumerable。它通过调用GetEnumerator集合来完成这个操作,这将返回一个Enumerator。
这个枚举器有一个方法和一个属性:
Current返回Enumerator当前所在的对象,并MoveNext更新Current到下一个对象。
显然,索引的概念对于枚举概念来说是陌生的,不可能做到。
因此,大多数集合都可以使用索引器和for循环构造来遍历。
我非常喜欢在这种情况下使用for循环,而不是使用局部变量来跟踪索引。