3

どうしたの?

    using QuickGraph;
    using GraphSharp;

     public class State
        {
            public string Name { get; set; }
            public override string ToString()
            {
                return Name;
            }
        }

     public class Event
        {
            public string Name;
            public override string ToString()
            {
                return Name;
            }
        }

    BidirectionalGraph<State, TaggedEdge<State, Event>> x =
                    new BidirectionalGraph<State, TaggedEdge<State, Event>>();

    GraphLayout graphLayout = new GraphLayout();
    graphLayout.Graph = x;

エラー:

QuickGraph.BidirectionalGraph<ChashaGraphSharp.State,QuickGraph.TaggedEdge<ChashaGraphSharp.State,ChashaGraphSharp.Event>>タイプを に暗黙的に変換することはできませんQuickGraph.IBidirectionalGraph<object,QuickGraph.IEdge<object>>。明示的な変換が存在します (キャストがありませんか?)

キャストを配置すると、アプリケーションは開始時に何の情報もなくフォルトエラーを受け取ります

どうしたの?

4

3 に答える 3

2

TaggedEdgeの代わりにタイプIEdgeを使用してBidirectionGraphのインスタンスを作成する必要があります。

BidirectionalGraph<State, IEdge<State, Event>> x =
                new BidirectionalGraph<State, IEdge<State, Event>>();

なぜそうなるのか完全には理解できませんが、上記はうまくいくはずです。

編集:このキャストが機能しない理由を説明するような質問をしました。

于 2010-04-19T23:36:55.787 に答える
1

カスタム グラフ (" " ではない IE) を使用する場合は、 " "BidirectionalGraph<Object, IEdge<Object>から継承するカスタム GraphLayout を使用する必要があります。ContextualGraphLayout

ここでは、" " の代わりに " GraphLayout" を使用しますContextualGraphLayout<State,Edge<<State>>,BidirectionalGraph<State, Edge<State>>>

読みやすくするために、ダミーのモデル クラスを作成することを強くお勧めします。例えば:

public MyVertex : State { }
public MyEdge : Edge<MyVertex> {
   public MyEdge (MyVertex source, MyVertex target)
      : base(source, target) { }

}

public MyGraph : BidirectionalGraph<MyVertex, MyEdge> { }
public MyGraphLayout : ContextualGraphLayout<MyVertex, MyEdge, MyGraph> {
    public MyGraphLayout () : base() { }

    public MyGraphLayout (bool allowParallelEdges)
        : base(allowParallelEdges) { }

    public MyGraphLayout (bool allowParallelEdges, int vertexCapacity)
        : base(allowParallelEdges, vertexCapacity) { }

}

于 2013-11-15T00:40:06.723 に答える
0

はい

しかし、TaggedEdge は IEdge インターフェイスを実装していません。カスタムの TaggedEdge を使用するにはどうすればよいですか?

于 2010-03-12T07:25:04.940 に答える