📜  索引处的 C# IEnumerable 访问元素 - C# (1)

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

索引处的 C# IEnumerable 访问元素

在C#中,IEnumerable接口表示实现循环访问集合中所有元素的枚举器。然而,访问这些元素需要使用一个索引器来确定位置。这篇文章将介绍如何使用索引器访问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中的元素并给出了一个对应的代码段。使用这个方法,开发者可以更方便地访问集合中指定位置的元素。