是否有办法让每个人获得行索引?
示例:
int rowIndex = 0;
foreach (int a in numbers)
{
// Manipulation
rowIndex++;
}
我想拥有什么
foreach (int a in numbers)
{
a.RowIndex;
}
有快速的方法吗?也许使用扩展方法?
答案 0 :(得分:4)
尝试以下
foreach ( var item in numbers.Select( (x,i) => new { Index = i, Value = x })) {
var index = item.Index;
var value = item.Value;
...
}
select的重载会传递项目的索引。此代码将为每个项目创建一个新的匿名类型,包括索引和值。
这是一种使语法更具可读性的替代方法。
public static void ForEach<T>(this IEnumerable<T> source, Action<T,int> del) {
int i = 0;
foreach ( var cur in source ) {
del(cur, i);
i++;
}
}
numbers.ForEach( (x,i) =>
{
// x is the value and i is the index
}
这并没有在定义本地上增加很多,而是手动增加它的解决方案。有没有特别的理由你不想那样做?
答案 1 :(得分:0)
如果您要坚持使用foreach循环,这可能是最简单的方法。没什么水平,但我认为这是最好的方式。
int rowIndex = 0;
foreach (int a in numbers)
{
rowIndex++; // You could of course inline this wherever rowIndex first
// gets used, and then simply reference rowIndex (without
// the increment) later.
// ...
}
但是一旦你开始这样做,最好只使用普通的for循环(除非你不能,因为集合只实现了IEnumerable
而不是IList
/ ICollection
当然)。