错误:方法的类型参数 无法从使用情况中推断出
GraphMLExtensions.SerializeToGraphML<TVertex, TEdge, TGraph>(TGraph, XmlWriter)
。
using System.Xml;
using QuickGraph;
using QuickGraph.Serialization;
var g = new AdjacencyGraph<string, Edge<string>>();
.... add some vertices and edges ....
using (var xwriter = XmlWriter.Create("somefile.xml"))
g.SerializeToGraphML(xwriter);
代码是从QuickGraph的文档中复制的。但是,当我明确地写它时,它可以工作:
using (var xwriter = XmlWriter.Create("somefile.xml"))
GraphMLExtensions.SerializeToGraphML<string, Edge<string>, AdjacencyGraph<string, Edge<string>>>(g, xwriter);
编辑:我看到了一些相关问题,但对我来说太过先进了。我只是担心使用它。我做错了什么还是文件?
答案 0 :(得分:5)
我做错了什么或是文档?
问题不在于扩展方法。问题在于,当您使用完整的静态方法路径时,您明确地提供泛型类型参数,而使用扩展方法时您根本不提供任何。
实际错误与编译器无法为您推断所有泛型类型参数这一事实有关,并且需要通过显式传递它们来提供帮助。
这将有效:
using (var xwriter = XmlWriter.Create("somefile.xml"))
{
g.SerializeToGraphML<string, Edge<string>,
AdjacencyGraph<string, Edge<string>>>(xwriter);
}
答案 1 :(得分:2)
此处最大的提示是,您必须明确GraphMLExtensions.SerializeToGraphML()
来电中的类型参数。
我快速浏览了source,并意识到了什么。
您正在使用此重载:
public static void SerializeToGraphML<TVertex, TEdge, TGraph>(
this TGraph graph,
XmlWriter writer)
where TEdge : IEdge<TVertex>
where TGraph : IEdgeListGraph<TVertex, TEdge>
此处TEdge
和TGraph
需要设置为特定类型,但没有与类型参数匹配的参数。这意味着您必须明确设置它们。
答案 2 :(得分:2)
您需要指定泛型类型,以便使用正确的泛型方法。只需添加它们即可调用泛型方法:
// Your using block, ...
g.SerializeToGraphML<string, Edge<string>, AdjacencyGraph<string, Edge<string>>>(xwriter);