2

無向グラフを操作するためのクラスを作成していますが、次のコンパイル時エラーが発生しました。

'Dictionary.EdgeCollection> .Add(TVertex、UndirectedGraph.EdgeCollection)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

UndirectedGraph<TVertex,TEdge>.AdjacentEdgeCollection<TVertex,TEdge> 引数2:からに変換できませんUndirectedGraph<TVertex,TEdge>.AdjacentEdgeCollection<TVertex,TEdge>

問題を次の例に減らすことができます。

public class UndirectedGraph<TVertex, TEdge>
{
    Dictionary<TVertex, EdgeCollection<TVertex, TEdge>> edges;

    class VertexCollection<TVertex, TEdge>
    {
        UndirectedGraph<TVertex, TEdge> graph;

        public VertexCollection(UndirectedGraph<TVertex, TEdge> graph)
        { this.graph = graph; }

        public void Add(TVertex value)
        {
            // Argument 2: cannot convert
            // from 'UndirectedGraph<TVertex,TEdge>.AdjacentEdgeCollection<TVertex,TEdge>'
            //   to 'UndirectedGraph<TVertex,TEdge>.AdjacentEdgeCollection<TVertex,TEdge>'
            this.graph.edges.Add(value, new EdgeCollection<TVertex, TEdge>(this.graph));
        }
    }

    class EdgeCollection<TVertex, TEdge>
    {
        public EdgeCollection(UndirectedGraph<TVertex, TEdge> graph) { }
    }
}

TVertexネストされたクラスとは外部クラスとTEdgeは異なり、名前を変更する必要があるという警告が表示されることに注意してください。私はそれを行うことができますが、これはエラーには影響しません。フラグメントの目的は明確だと思いますが、どうすれば自分のやりたいことを実行でき、どこで考えがうまくいかないのでしょうか。TVertexTEdge

4

1 に答える 1

4

TVertex3 つの型パラメーターと 3 つの型パラメーターがあることは確かTEdgeですか? 3つすべてが同じで、必要なものは次のとおりです。

public class UndirectedGraph<TVertex, TEdge>
{
    Dictionary<TVertex, EdgeCollection> edges;

    class VertexCollection
    {
        UndirectedGraph<TVertex, TEdge> graph;

        public VertexCollection(UndirectedGraph<TVertex, TEdge> graph)
        { this.graph = graph; }

        public void Add(TVertex value)
        {
            this.graph.edges.Add(value, new EdgeCollection(this.graph));
        }
    }

    class EdgeCollection
    {
        public EdgeCollection(UndirectedGraph<TVertex, TEdge> graph) { }
    }
}
于 2012-10-12T21:54:37.130 に答える