仅仅拥有这个还不够吗:
public Enumerator GetEnumerator()
=> new Enumerator(this);
不,它不会,因为它不会实现IEnumerable<T>
or IEnumerable
,其中GetEnumerator()
方法的返回类型分别为IEnumerator<T>
and IEnumerator
。
返回类型必须匹配才能实现接口。
确实,很容易自己测试一下:
using System.Collections;
using System.Collections.Generic;
public class MyList<T> : IEnumerable<T>
{
public Enumerator GetEnumerator() =>
new Enumerator();
// Implement this fully so we can concentrate on IEnumerable<T>
public struct Enumerator : IEnumerator<T>
{
public T Current => default;
object IEnumerator.Current => default;
public bool MoveNext() => true;
public void Reset() {}
public void Dispose() {}
}
}
这给出了以下错误:
- 错误 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”。