C#为什么我不能为我的班级编写自定义IEnumerator

Ist*_*tel 0 c# ienumerable

我有一个简单的类,它在一个很可能是树的图形中表示一个顶点.因此,这个类看起来像这样:

class Vertex {
  public Vertex parent;
  public List<Vertex> children;
}
Run Code Online (Sandbox Code Playgroud)

在不太可能的循环情况下,我可以多次链接到与子相同的顶点.

现在,我创建了一个枚举器,它将给出图中的每个顶点.这样你就可以做到

foreach (Vertex item in rootVertex)
Run Code Online (Sandbox Code Playgroud)

并获取图中的每个顶点.为此,我必须使我的类IEnumerable {Vertex}并编写GetEnumerator方法,以递归方式生成所有Vertexes.

现在,为了绘制图形,我想在同一个类中有另一个枚举器,它将返回图中的每个边.所以我可以做点什么

foreach (Point[] item in rootVertex.GetEdges())
Run Code Online (Sandbox Code Playgroud)

并获得所有优势.为此,为了避免混淆,我从我的类中删除了IEnumerable,并实现了两个这样的方法

public IEnumerator<Vertex> GetVertexes() { ...code... }
public IEnumerator<Point[]> GetEdges() { ...code... }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试做的时候

foreach (Point[] item in rootVertex.GetEdges())
Run Code Online (Sandbox Code Playgroud)

它吐出错误 - foreach无法枚举rootVertex,因为Vertex类不包含GetEnumerator方法.

我试过谷歌搜索,但没有发现或不能我或不能在同一个班级上制作多个调查员.

Nen*_*nad 5

首先,显而易见,你应该IEnumerable没有IEnumerator返回结果:

public IEnumerable<Point[]> GetEdges() { ...code... }
Run Code Online (Sandbox Code Playgroud)