2013-03-21 81 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

相關問題