问题描述
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);
解决方法
仅仅拥有这个还不够:
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”的匹配返回类型。