Ian Mercer 发布了与此类似的解决方案菲尔·哈克的博客:
foreach (var item in Model.Select((value, i) => new { i, value }))
{
var value = item.value;
var index = item.i;
}
这会给你带来物品(item.value
) 及其索引 (item.i
) 通过使用LINQ 的这种超载Select:
函数[Inside Select]的第二个参数表示源元素的索引。
The new { i, value }
正在创建一个新的匿名对象.
可以通过使用避免堆分配ValueTuple
如果您使用的是 C# 7.0 或更高版本:
foreach (var item in Model.Select((value, i) => ( value, i )))
{
var value = item.value;
var index = item.i;
}
您还可以消除item.
通过使用自动解构:
foreach (var (value, i) in Model.Select((value, i) => ( value, i )))
{
// Access `value` and `i` directly here.
}