📜  c#中foreach中的索引(1)

📅  最后修改于: 2023-12-03 14:59:43.920000             🧑  作者: Mango

C#中foreach中的索引

在C#中,foreach循环是一种方便的迭代语法,可通过枚举器(enumerator)遍历集合或数组中的元素。但是,在某些情况下,需要获取元素的索引,而foreach默认情况下不提供此功能。

使用内置的索引计数器

C#中的foreach实际上依赖于IEnumerable和IEnumerator接口。IEnumerator接口定义了一个Current属性和一个MoveNext方法。当使用foreach循环时,系统会自动创建一个实现了IEnumerator接口的对象,并调用MoveNext方法和获取Current属性。

现在,考虑以下代码片段:

int[] arr = { 1, 2, 3, 4, 5 };
foreach (int i in arr)
{
    Console.WriteLine(i);
}

在foreach循环中,变量i代表数组arr中的元素。要在循环中包含索引计数器,可以使用一个变量记录计数值,如下所示:

int[] arr = { 1, 2, 3, 4, 5 };
int count = 0;
foreach (int i in arr)
{
    Console.WriteLine("索引{0}的值:{1}", count, i);
    count++;
}

现在循环中还包含了一个计数器count,每次循环时,该变量自增1。因此,可以将其用于获取每个元素的索引。

使用LINQ的Select方法

为了方便起见,可以使用LINQ的Select方法来获取每个元素以及其索引。此方法需要传入一个委托,该委托将每个元素转换为另一个类型,并将该元素的索引作为第二个参数传递。

以下是示例代码:

int[] arr = { 1, 2, 3, 4, 5 };
var result = arr.Select((x, i) => new { Index = i, Value = x });
foreach (var item in result)
{
    Console.WriteLine("索引{0}的值:{1}", item.Index, item.Value);
}

在这个例子中,使用了Select方法,该方法接受一个返回匿名类型对象的委托。委托中的两个参数分别为当前元素和索引。

通过返回一个带有两个属性的匿名类型对象(Index和Value),可以获得元素的值和索引。

总结

无论使用哪种方法,都可以在foreach循环中获得元素的索引。通过内置的索引计数器或使用LINQ的Select方法,可以轻松地在C#中实现该功能。

注意,当循环的集合或数组为空时,内置索引计数器方法可能会导致异常。在这种情况下,应先检查集合或数组是否为空,或使用LINQ的Select方法。