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を削除し、次の2つのメソッドを実装しました。

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

しかし、私がやろうとすると

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

エラーが発生します-頂点クラスにGetEnumeratorメソッドが含まれていないため、foreachはrootVertexを列挙できません。

グーグルを試しましたが、同じクラスで複数の列挙子を作成できるかどうかはわかりませんでした。

4

1 に答える 1

5

最初に明らかなことですが、結果を返す必要はありIEnumerableません。IEnumerator

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