【发布时间】:2017-03-14 09:08:51
【问题描述】:
我不认为我理解IEnumerable 并且已经进行了几次谷歌搜索。
我应该为一些对象创建一个容器,其中 Container 类应该处理容器所代表的集合的更新(添加、删除)。
集合Container 应该是IEnumerable<element> 的实例。
namespace ....
{
public class Container : Ienumerable<Elements>
{
List<Elements> _elm = new List<Elements>();
List<Elements> _add = new List<Elements>();
List<Elements> _rem = new List<Elements>();
public voic PendAdd(Element elm)
{
_add.Add(elm);
}
public voic Pendrem(Element elm)
{
_rem.remove(elm);
}
...
public IEnumerator<Element> GetEnumerator()
{
return _elm.GetEnumerator();
}
}
}
我的问题是IEnumerable<Elements> 是一个抽象类型,如果我将_elm 设为这种类型,即使我做到了,我也无法处理Container 的状态
IEnumerable<Element> _elm = new List<Element> ();
VS 报错:
'Container' 没有实现接口成员 'IEnumerable.GetEnumerator()'。 'Container.GetEnumerator()' 不能 实现 'IEnumerable.GetEnumerator()' 因为它没有 'IEnumerator' 的匹配返回。
我知道有几个关于 IEnumerable 的答案,但它们对我没有帮助。
【问题讨论】:
-
Element和Elements有什么区别?您继承了IEnumerable<Elements>,但将GetEnumerator的返回类型声明为IEnumerator<Element>,并且您缺少非泛型IEnumerator GetEnumerator()方法。 -
如果您在 Visual Studio 中使用“实现接口”快捷方式,它将创建您需要实现的方法。根据 xanatos 的回答,这包括缺少的 GetEnumerator 方法及其正确的返回类型。
-
为什么要从 IEnumerable 继承?为什么你有三个不同的列表?您可以只在 IEnumerable(例如 List)周围有一个包装类,并拥有从该列表中添加/删除的方法。
-
在 google 上搜索
does not implement interface member 'IEnumerable.GetEnumerator()'.会立即出现几篇 SO 帖子,其中之一是 ► Troubles implementing IEnumerable<T> -
感谢所有 cmets 元素/元素是一个错字。对不起,如果我的问题不是那么清楚,我是 OO 和 C# 的新手。我的专长主要是函数式编程,如 SML、F# 和 Ocaml。并且可以说我和一个试图学习函数式编程的 OO 人有同样的情绪。我只是对它感兴趣.. 我得到了一些跟进,但我在答案部分记下了它们
标签: c# ienumerable