0

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

class Vertex {
  public Vertex parent;
  public List<Vertex> children;
}

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

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

foreach (Vertex item in rootVertex)

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

现在,为了绘制图形,我还想在同一个类中有另一个枚举器,它将返回图形中的每条边。所以我可以做类似的事情

foreach (Point[] item in rootVertex.GetEdges())

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

public IEnumerator<Vertex> GetVertexes() { ...code... }
public IEnumerator<Point[]> GetEdges() { ...code... }

但是,当我尝试做

foreach (Point[] item in rootVertex.GetEdges())

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

我尝试使用谷歌搜索,但没有发现我是否可以或不能在同一个班级上创建多个枚举器。

4

1 回答 1

5

首先很明显,你不应该IEnumerable作为IEnumerator返回结果:

public IEnumerable<Point[]> GetEdges() { ...code... }
于 2013-03-21T07:46:51.940 回答