2

我正在编写一个简单的集合类来实现ICollection<T>. 一切基本上都有效,除非我添加一个IEnumerator<T> GetEnumerator()方法,它抱怨我没有IEnumerator GetEnumerator()方法。反之亦然。我不允许同时拥有两者,因为它们仅在返回类型上有所不同,所以我真的很困惑编译器想要从我这里得到什么。

以下是给我的错误:

错误 CS0738:MyClass<T>' does not implement interface memberSystem.Collections.Generic.IEnumerable.GetEnumerator()' 和最佳实现候选MyClass<T>.GetEnumerator()' return typeSystem.Collections.IEnumerator' 与接口成员返回类型 `System.Collections.Generic.IEnumerator' 不匹配

或者,或者我可以拥有:

错误 CS0738:MyClass<T>' does not implement interface memberSystem.Collections.IEnumerable.GetEnumerator()' 和最佳实现候选MyClass<T>.GetEnumerator()' return typeSystem.Collections.Generic.IEnumerator' 与接口成员返回类型 `System.Collections.IEnumerator' 不匹配

4

3 回答 3

6

明确地实现它们:

IEnumerator IEnumerable.GetEnumerator() {
}

IEnumerator<T> IEnumerable<T>.GetEnumerator() {
}

// etc.

显式接口实现是如何实现的。在 MSDN 上阅读它:http: //msdn.microsoft.com/en-us/library/aa288461 (v=vs.71).aspx

于 2013-10-17T03:35:02.697 回答
3

使用显式接口实现。这正是List<T>实现IEnumerableand的方式IEnumerable<T>,指向第三种GetEnumerator方法:

IEnumerator IEnumerable.GetEnumerator()
{
    return new List<T>.Enumerator(this);
}

IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
    return new List<T>.Enumerator(this);
}

public List<T>.Enumerator GetEnumerator()
{
    return new List<T>.Enumerator(this);
}

使用这种声明,您可以拥有几个具有相同名称的方法——只要它们实现了一些接口方法。

于 2013-10-17T03:33:35.783 回答
-3

ICollection 扩展了 IEnumerable。因此你不想在你的班级上做 IEnumerable

http://msdn.microsoft.com/en-us/library/92t2ye13.aspx

于 2013-10-17T03:33:35.737 回答