C# foreach中获取循环索引的4种方式
|
admin
2025年3月6日 11:13
本文热度 321
|
在C#中使用foreach循环的时候我们有时会碰到需要索引的情况,在for循环中我们可以得到循环索引 , foreach并不直接提供 , 下面介绍4种foreach获取索引的方法,希望对大家有用处:在循环外部声明 index 变量,每次循环时手动递增:int index = 0;
foreach (var item in collection)
{
Console.WriteLine($"{index}: {item}");
index++;
}
通过 Select 方法将元素与索引绑定为元组,结合 C# 7.0+ 的元组解构语法:foreach (var (item, index) in collection.Select((value, i) => (value, i)))
{
Console.WriteLine($"{index}: {item}");
}
- 需注意 System.Linq 命名空间和 System.ValueTuple 包(旧版本需手动安装)。
自定义扩展方法 WithIndex,增强代码复用性:public static IEnumerable<(T item, int index)> WithIndex<T>(this IEnumerable<T> source)
{
return source.Select((item, index) => (item, index));
}
foreach (var (item, index) in collection.WithIndex())
{
Console.WriteLine($"{index}: {item}");
}
调用集合的 IndexOf 方法直接获取元素索引(适用于 List<T> 等支持索引查找的集合):foreach (var item in collection)
{
int index = collection.IndexOf(item);
Console.WriteLine($"{index}: {item}");
}
- 依赖集合的 IndexOf 实现,仅适用于元素唯一且支持索引查找的集合。
- 性能较差:每次循环均遍历集合查找索引,时间复杂度为 O(n^2)。
- LINQ 方法:引入轻微性能开销(如迭代器生成),但对大多数场景影响可忽略。
- 扩展方法:适合高频使用场景,平衡性能与代码整洁度。
- IndexOf:元素唯一且需动态查找索引,性能差,重复元素不可靠。
选择时需根据具体需求(如代码简洁性、性能要求、框架版本兼容性)综合考量。
该文章在 2025/3/6 11:13:39 编辑过