我不认为我理解IEnumerable
并且已经进行了多次谷歌搜索。
我应该创建一些Container的对象,其中类Container
应该处理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抱怨错误:
&#39;集装箱&#39;没有实现接口成员 &#39; IEnumerable.GetEnumerator()&#39 ;. &#39; Container.GetEnumerator()&#39;不能 实现&#39; IEnumerable.GetEnumerator()&#39;因为它没有 匹配返回&#39; IEnumerator&#39;。
我知道IEnumerable有几个答案,但它们对我没有帮助。
答案 0 :(得分:3)
您遗漏了从IEnumerable.GetEnumerator()
继承的IEnumerable<T>
:IEnumerable
。因此,在您的班级中,您需要两个不同的GetEnumerator()
,其中包含两种不同的返回类型。
public class Container : IEnumerable<Element>
{
List<Element> _elm = new List<Element>();
List<Element> _add = new List<Element>();
List<Element> _rem = new List<Element>();
public void PendAdd(Element elm)
{
_add.Add(elm);
}
public void Pendrem(Element elm)
{
_rem.Remove(elm);
}
public IEnumerator<Element> GetEnumerator()
{
return _elm.GetEnumerator();
}
// This is called "explicit interface implementation", see
// https://msdn.microsoft.com/en-us/library/ms173157.aspx
IEnumerator IEnumerable.GetEnumerator()
{
// will call the "other" GetEnumerator()
return GetEnumerator();
}
}
下次你必须实现一个界面时,我建议你右键单击Visual Studio中的界面并选择Implement Interface
来获取你需要的所有方法的骨架。