我有一个简单的类,它表示图中很可能是一棵树的顶点。因此,这个类看起来像这样:
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 方法。
我尝试使用谷歌搜索,但没有发现我是否可以或不能在同一个班级上创建多个枚举器。