views:

137

answers:

2

Whats wrong?

    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;

Error:

Cannot implicitly convert type QuickGraph.BidirectionalGraph<ChashaGraphSharp.State,QuickGraph.TaggedEdge<ChashaGraphSharp.State,ChashaGraphSharp.Event>> to QuickGraph.IBidirectionalGraph<object,QuickGraph.IEdge<object>>. An explicit conversion exists (are you missing a cast?)

If I put the cast, then application gets fault error on start without any information

What's wrong?

A: 

Yes

But TaggedEdge does not implement IEdge interface How to use custom TaggedEdge?

Evl-ntnt
+1  A: 

You need to create your instance of BidirectionGraph using the type IEdge instead of TaggedEdge:

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

I can't say that I fully understand why this is the case, however the above should work.

EDIT: I asked a question that kind of explains why this cast doesn't work.

Kragen