Mav*_*ang 1 c# ienumerable ienumerator
我对这个IEnumerator.GetEnumerator()方法有疑问.
public class NodeFull
{
public enum Base : byte {A = 0, C, G, U };
private int taxID;
private List<int> children;
public int TaxID
{
get { return taxID; }
set { taxID = value; }
}
public int this[int i]
{
get { return children[i]; }
set { children[i] = value; }
}
public IEnumerator GetEnumerator()
{
return (children as IEnumerator).GetEnumerator();
}
public TaxNodeFull(int taxID)
{
this.taxID = taxID;
this.children = new List<int>(3);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,错误消息说
'System.Collections.IEnumerator'不包含'GetEnumerator'的定义,并且没有扩展方法'GetEnumerator'接受类型为'System.Collections.IEnumerator'的第一个参数'(您是否缺少using指令或程序集引用) ?)
代码有什么问题吗?
提前致谢
感谢你们.我知道了.
这是IEnumerable.GetEnumerator()(或IEnumerable<T>.GetEnumerator()),不是IEnumerator.GetEnumerator().成员IEnumerator是MoveNext(),Current和Reset()(和Dispose通用版本).它IEnumerable是"可以迭代的东西"(例如列表),IEnumerator表示该迭代中的当前状态 - 就像数据库游标一样.
你的班级没有实现IEnumerable或者IEnumerable<T>本身有点奇怪.我期待这样的事情:
class NodeFull : IEnumerable<int>
{
... other stuff as normal ...
public IEnumerator<int> GetEnumerator()
{
return children.GetEnumerator();
}
// Use explicit interface implementation as there's a naming
// clash. This is a standard pattern for implementing IEnumerable<T>.
IEnumerator IEnumerable.GetEnumerator()
{
// Defer to generic version
return GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)