📜  c# implement ienumerable t - C# (1)

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

C# implement IEnumerable

在 C# 中,IEnumerable 是一个接口,它定义了一个泛型序列的枚举器,能够提供对该序列的只读访问。在这个主题中,我们将学习如何实现 IEnumerable 接口。

实现 IEnumerable 接口

我们可以通过实现接口来实现 IEnumerable。在实现之前,我们需要了解一下什么是迭代器。

迭代器

在 C# 中,迭代器是用于遍历集合的一种方式,它使我们能够使用 foreach 语句来循环遍历集合。迭代器通常包含两个部分:迭代器方法和 yield 语句。

迭代器方法是一个方法,它必须返回 IEnumerable 或 IEnumerator 接口。它通常包含一个或多个 yield 语句。yield 语句用于返回序列中的下一个元素,同时暂停迭代器方法的执行,以便等待下一次迭代。

下面是一个简单的迭代器示例:

public static IEnumerable<int> GetNumbers()
{
    yield return 1;
    yield return 2;
    yield return 3;
}

在这个示例中,GetNumbers 方法是一个迭代器方法,它返回一个 IEnumerable 对象。它包含了三个 yield 语句,用于返回 1、2 和 3。

现在我们已经了解了迭代器的基础知识,接下来我们将学习如何实现 IEnumerable 接口。

实现 IEnumerable

实现 IEnumerable 接口的关键是实现 GetEnumerator 方法。GetEnumerator 方法必须返回一个实现了 IEnumerator 接口的对象,它用于遍历集合。这个接口包含了两个方法:MoveNext 和 Current。MoveNext 方法用于将枚举器移到集合的下一个元素,如果已经到达集合的结尾则返回 false。Current 属性用于获取枚举器当前位置的元素。

下面是一个实现了 IEnumerable 接口的示例:

public class MyList<T> : IEnumerable<T>
{
    private T[] items;

    public MyList(T[] items)
    {
        this.items = items;
    }

    public IEnumerator<T> GetEnumerator()
    {
        for (int i = 0; i < items.Length; i++)
        {
            yield return items[i];
        }
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

在这个示例中,我们创建了一个名为 MyList 的泛型类,它实现了 IEnumerable 接口。这个类包含一个 T 类型的数组和一个 GetEnumerator 方法,这个方法使用迭代器来遍历数组中的元素。

现在我们可以使用 foreach 语句来遍历 MyList 类型的对象了:

var myList = new MyList<int>(new int[] { 1, 2, 3 });

foreach (var item in myList)
{
    Console.WriteLine(item);
}

输出:

1
2
3
总结

在 C# 中,实现 IEnumerable 接口是遍历集合的基础。通过实现这个接口,我们可以使用 foreach 语句来循环遍历集合。本文介绍了如何实现 IEnumerable 接口,包括迭代器的基础知识和示例代码。