实现ICollection时无法实现GetEnumerator返回IEnumerator和IEnumerator <t> </t> </t>

时间:2013-10-17 03:29:47

标签: c# .net generics

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

这些错误正如我们给出的那样:

  

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

或者,我可以:

  

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

3 个答案:

答案 0 :(得分:6)

明确地实施它们:

IEnumerator IEnumerable.GetEnumerator() {
}

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

// etc.

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

答案 1 :(得分:3)

使用explicit interface implementation。这正是List<T>实现IEnumerableIEnumerable<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);
}

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

答案 2 :(得分:-3)

ICollection扩展了IEnumerable。因此,您不希望在您的类上执行IEnumerable

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