为什么 List<T> 声明 GetEnumerator() 和 IEnumerable<T>.GetEnumerator()?

Bac*_*ave 2 c# ienumerable ienumerator interface explicit-interface

为什么List定义了这三个方法?

    public Enumerator GetEnumerator()
        => new Enumerator(this);

    IEnumerator<T> IEnumerable<T>.GetEnumerator()
        => new Enumerator(this);

    IEnumerator IEnumerable.GetEnumerator()
        => new Enumerator(this);
Run Code Online (Sandbox Code Playgroud)

他们都在做同样的事情。仅仅拥有这个还不够:

public Enumerator GetEnumerator()
        => new Enumerator(this);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

仅仅拥有这个还不够:

public Enumerator GetEnumerator()
       => new Enumerator(this);
Run Code Online (Sandbox Code Playgroud)

不,它不会,因为它不会实现IEnumerable<T>or IEnumerable,其中GetEnumerator()方法的返回类型为IEnumerator<T>IEnumerator分别。

返回类型必须匹配才能实现接口。

事实上,自己测试这个很容易:

public Enumerator GetEnumerator()
       => new Enumerator(this);
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误:

  • 错误 CS0738:“MyList<T>”未实现接口成员“IEnumerable<T>.GetEnumerator()”。'MyList<T>.GetEnumerator()' 不能实现 'IEnumerable<T>.GetEnumerator()',因为它没有匹配的返回类型 'IEnumerator<T>'。
  • 错误 CS0738:“MyList<T>”未实现接口成员“IEnumerable.GetEnumerator()”。'MyList<T>.GetEnumerator()' 不能实现 'IEnumerable.GetEnumerator()',因为它没有匹配的 'IEnumerator' 返回类型。