📅  最后修改于: 2023-12-03 14:56:46.067000             🧑  作者: Mango
在C#中,IEnumerable接口表示实现循环访问集合中所有元素的枚举器。然而,访问这些元素需要使用一个索引器来确定位置。这篇文章将介绍如何使用索引器访问IEnumerable接口中的元素。
可以使用以下代码段实现在IEnumerable实例上的索引访问:
public static T ElementAt<T>(IEnumerable<T> source, int index)
{
if (source is IList<T> list)
{
return list[index];
}
else if (source is IReadOnlyList<T> readOnlyList)
{
return readOnlyList[index];
}
else
{
using (var e = source.GetEnumerator())
{
for (int i = 0; i <= index; i++)
{
if (!e.MoveNext())
{
throw new ArgumentOutOfRangeException(nameof(index));
}
}
return e.Current;
}
}
}
这段代码首先检查IEnumerable实例是否实现了IList或IReadOnlyList接口。如果是,那么直接通过索引器访问元素并返回结果。如果不是,那么使用迭代器遍历集合并返回指定位置的元素。
调用示例:
var list = new List<int>() { 1, 2, 3, 4, 5 };
var element = ElementAt(list, 2); // returns 3
在C#中,使用IEnumerable接口实现集合遍历是非常常见的。本文介绍了如何通过索引器访问IEnumerable中的元素并给出了一个对应的代码段。使用这个方法,开发者可以更方便地访问集合中指定位置的元素。