首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在实现GetEnumerator时不能同时实现IEnumerator和IEnumerator<T>

在实现GetEnumerator时不能同时实现IEnumerator和IEnumerator<T>
EN

Stack Overflow用户
提问于 2013-10-17 03:29:47
回答 3查看 2.1K关注 0票数 2

我正在编写一个实现ICollection<T>的简单集合类。除了添加一个IEnumerator<T> GetEnumerator()方法之外,一切基本上都正常工作,它抱怨说,我没有IEnumerator GetEnumerator()方法。反之亦然。我不允许两者兼得,因为它们只是在返回类型上不同,所以我真的很困惑编译器想要我做什么。

以下是我所犯的错误:

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

或者,我也可以:

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-17 03:35:02

明确执行这些原则:

代码语言:javascript
复制
IEnumerator IEnumerable.GetEnumerator() {
}

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

// etc.

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

票数 6
EN

Stack Overflow用户

发布于 2013-10-17 03:33:35

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

代码语言:javascript
复制
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);
}

有了这种声明,您就可以有两个同名的方法--只要它们实现了一些接口方法。

票数 3
EN

Stack Overflow用户

发布于 2013-10-17 03:33:35

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

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

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19417756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档