2013-03-21 115 views
0

我有一个简单的类,它表示一个最可能是树的图中的顶点。因此,这个类看起来是这样的:C#为什么我不能为自己的类编写自定义的IEnumerator

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方法。

我试过谷歌搜索,但没有找到她或不我可以或不能在同一类上做多个枚举。

+0

你能后整个'Vertex'类包括'GetVertexes' /'GetEdges'? – 2013-03-21 07:42:52

回答

5

首先和明显的,你应该有IEnumerableIEnumerator为返回结果:

public IEnumerable<Point[]> GetEdges() { ...code... } 
+0

啊。这就是它... IEnumerator只在实现GetEnumerator()时使用? – Istrebitel 2013-03-21 08:02:45

+0

@Istrebitel,基本上是的,看看http://msdn.microsoft.com/en-us/library/78dfe2yb.aspx :) – flindeberg 2013-03-21 09:13:36

相关问题