InvocationExpressionSyntax
की विधि प्रतीक है कि एक नाम स्थान प्रतीक है कि आप निर्देशों का उपयोग का प्रतीक पुन: प्राप्त करने से मिलता है के बराबर होना चाहिए एक सदस्य ContainingNamespace
है। अर्थ Name
सदस्य को अर्थपूर्ण मॉडल पूछताछ के लिए शुरुआती बिंदु के रूप में उपयोग करना है, क्योंकि पूरे UsingDirectiveSyntax
आपको एक प्रतीक नहीं देंगे।
Try this LINQPad query (या एक सांत्वना परियोजना में कॉपी), और आप क्वेरी की अंतिम पंक्ति पर true
मिलेगा;)
// create tree, and semantic model
var tree = CSharpSyntaxTree.ParseText(@"
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(""Hello World"");
}
}");
var root = tree.GetRoot();
var mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create("SO-39451235", syntaxTrees: new[] { tree }, references: new[] { mscorlib });
var model = compilation.GetSemanticModel(tree);
// get the nodes refered to in the SO question
var usingSystemDirectiveNode = root.DescendantNodes().OfType<UsingDirectiveSyntax>().Single();
var consoleWriteLineInvocationNode = root.DescendantNodes().OfType<InvocationExpressionSyntax>().Single();
// retrieve symbols related to the syntax nodes
var writeLineMethodSymbol = (IMethodSymbol)model.GetSymbolInfo(consoleWriteLineInvocationNode).Symbol;
var namespaceOfWriteLineMethodSymbol = (INamespaceSymbol)writeLineMethodSymbol.ContainingNamespace;
var usingSystemNamespaceSymbol = model.GetSymbolInfo(usingSystemDirectiveNode.Name).Symbol;
// check the namespace symbols for equality, this will return true
namespaceOfWriteLineMethodSymbol.Equals(usingSystemNamespaceSymbol).Dump();
मुझे नहीं लगता कि आप वाक्य रचना पेड़ में कुछ भी पाते हैं करते हैं - इससे पहले कि यह तय किया जाए कि कौन सी विशिष्ट श्रेणी 'कंसोल' का संदर्भ है, आपको पहले सेमेन्टिक्स की आवश्यकता होगी। –
हां वास्तव में, लेकिन जब भी मेरे पास दोनों का प्रतीक वस्तु है, तो मैं उन्हें कैसे जोड़ सकता हूं? – TWT