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

时间:2021-06-08 08:06:22

标签: c# interface ienumerable ienumerator explicit-interface

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:7)

<块引用>

仅仅拥有这个还不够:

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

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

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

确实,您可以很容易地自行测试:

IEnumerator

这会产生以下错误:

  • 错误 CS0738:'MyList' 没有实现接口成员 'IEnumerable.GetEnumerator()'。 'MyList.GetEnumerator()' 不能实现 'IEnumerable.GetEnumerator()',因为它没有匹配的 'IEnumerator' 返回类型。
  • 错误 CS0738:“MyList”没有实现接口成员“IEnumerable.GetEnumerator()”。 “MyList.GetEnumerator()”无法实现“IEnumerable.GetEnumerator()”,因为它没有“IEnumerator”的匹配返回类型。
相关问题