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

您需要使用类型 IEdge 而不是 TaggedEdge 创建 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>”)您需要使用继承自“ ContextualGraphLayout”的自定义 GraphLayout

在这里,不要使用“ 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 回答