关于ienumerator.getEnumerator c#中的一个问题
-
03-10-2019 - |
题
我有一个问题 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);
}
}
当我尝试编译时,错误消息说
“ system.collections.ienumerator”不包含“ getEnumerator”的定义,也没有扩展方法“ getEnumerator”接受类型'system.collections.collections.ienumerator'的第一个参数(您是否缺少使用指令或使用指令或汇编参考参考) ?)
代码有什么问题吗?
提前致谢
谢谢你们。我得到了它。
解决方案
它是 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();
}
}
其他提示
孩子是 List<int>
, ,实施 IEnumerable<int>
和 IEnumerable
. 。这 GetEnumerator()
为这些接口定义了方法,而不是 IEnumerator
.
children as IEnumerator
应该导致无效。
没有 GetEnumerator()
方法 ienumerator 界面。您是否想使用 ienumerable 也许接口?
不隶属于 StackOverflow