2015-12-02 4 views
6

Error: The type arguments for method GraphMLExtensions.SerializeToGraphML<TVertex, TEdge, TGraph>(TGraph, XmlWriter) cannot be inferred from the usage.एक्सटेंशन विधि काम नहीं करता है (त्वरित ग्राफ़ क्रमबद्धता)

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

क्या आपके पास सभी असेंबली संदर्भित हैं और सभी आवश्यक उपयोग हैं? – BendEg

+0

हां। जैसा कि आप दूसरे कोड से देख सकते हैं GraphMLExtensions क्लास को पहचाना जाता है। यह QuickGraph.Serialization नामस्थान में है। – kptlronyttcna

+0

क्या होता है, यदि आप जेनेरिक प्रकार सेट करते हैं? 'g.SerializeToGraphML <..., ...> (xwriter);'? – BendEg

उत्तर

5

Am I doing something wrong or it's the documentation?

समस्या विस्तार विधि के साथ नहीं है। समस्याएं इस तथ्य में बताती हैं कि जब आप पूर्ण स्थिर विधि पथ का उपयोग करते हैं, तो आप जेनेरिक प्रकार तर्क स्पष्ट रूप से प्रदान करते हैं, विस्तार विधि का उपयोग करते समय आप किसी भी प्रकार की आपूर्ति नहीं कर रहे हैं।

वास्तविक त्रुटि इस तथ्य से संबंधित है कि संकलक आपके लिए सभी सामान्य प्रकार के तर्कों का अनुमान नहीं लगा सकता है, और स्पष्ट रूप से उन्हें पारित करके आपकी सहायता की आवश्यकता है।

यह काम करेगा:

using (var xwriter = XmlWriter.Create("somefile.xml")) 
{ 
    g.SerializeToGraphML<string, Edge<string>, 
     AdjacencyGraph<string, Edge<string>>>(xwriter); 
} 
+0

क्या दर्द, धन्यवाद। – kptlronyttcna

+0

@ kptlronyttcna आपका स्वागत है। शायद संकलक आपके लिए प्रकार के कुछ तर्कों का अनुमान लगा सकता है। मुझे यकीन नहीं है कि, खुद को संयोजनों का प्रयास करें। –

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

आपको जेनेरिक प्रकार निर्दिष्ट करने की आवश्यकता है, ताकि सही जेनेरिक विधि का उपयोग किया जा सके। जेनेरिक विधि को कॉल करने के लिए बस उन्हें जोड़ें:

// Your using block, ... 
g.SerializeToGraphML<string, Edge<string>, AdjacencyGraph<string, Edge<string>>>(xwriter); 
संबंधित मुद्दे