C# 如何将自定义双向图从QuickGraph应用到Graph#的GraphLayout?
怎么了C# 如何将自定义双向图从QuickGraph应用到Graph#的GraphLayout?,c#,graph,quickgraph,C#,Graph,Quickgraph,怎么了 using QuickGraph; using GraphSharp; public class State { public string Name { get; set; } public override string ToString() { return Name; } } pub
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;
使用快速图形;
使用图形竖琴;
公共阶级国家
{
公共字符串名称{get;set;}
公共重写字符串ToString()
{
返回名称;
}
}
公开课活动
{
公共字符串名称;
公共重写字符串ToString()
{
返回名称;
}
}
双向图x=
新的双向图();
GraphLayout GraphLayout=新的GraphLayout();
graphLayout.Graph=x;
错误:
无法将类型QuickGraph.BidirectionalGraph
隐式转换为QuickGraph.IBidirectionalGraph
。存在显式转换(是否缺少强制转换?)
如果我进行了强制转换,那么应用程序在启动时会在没有任何信息的情况下出错
怎么了?是的
但是TaggedEdge并没有实现IEdge接口
如何使用自定义TaggedEdge?您需要使用类型IEdge而不是TaggedEdge创建BidDirectionGraph的实例:
BidirectionalGraph<State, IEdge<State, Event>> x =
new BidirectionalGraph<State, IEdge<State, Event>>();
双向图x=
新的双向图();
我不能说我完全理解为什么会出现这种情况,但是上述方法应该有效
编辑:我认为这可以解释为什么这个转换不起作用。如果您使用自定义图形(即不是“
bidirectionalgraphy您的意思是GraphLayout的Graph属性需要一个IBidirectionalGraph
对吗?它是从实现IEdge的Edge继承的。您可以创建一个新类,该类将同时实现IEdge和ITAGED。
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) { }