C# 泛型 IEnumerable

C# Generic IEnumerable

我正在深入了解迭代器模式,因此最终我可以在某些 classes 中使用它。这是一个测试 class:

public class MyGenericCollection : IEnumerable<int>
{
    private int[] _data = { 1, 2, 3 };

    public IEnumerator<int> GetEnumerator()
    {
        foreach (int i in _data)
        {
            yield return i;
        }
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

我对 IEnumerable.GetEnumerator() 部分感到困惑。在我 运行 的代码测试中,它从未被引用或使用过,但我必须使用它来实现通用 IEnumerable.

我明白 IEnumerable<T> 继承自 IEnumerator,所以我必须实现两者。

除此之外,当使用非通用接口时,我感到很困惑。在调试中它从未进入。谁能帮我理解一下?

I'm confused on the IEnumerable.GetEnumerator() section. In the code tests that I've ran, it's never referenced or used, but I have to have it to implement the generic IEnumerable.

它会被任何使用您的类型的东西用作 IEnumerable。例如:

IEnumerable collection = new MyGenericCollection();
// This will call the GetEnumerator method in the non-generic interface
foreach (object value in collection)
{
    Console.WriteLine(value);
}

只有几个 LINQ 方法也会调用它:CastOfType:

var castCollection = new MyGenericCollection().OfType<int>();