से TypeSyntax प्राप्त करें मैं Roslyn-CTP के साथ थोड़ा सा प्रयोग कर रहा हूं।ITypeSymbol
वर्तमान में मैं कंक्रीट प्रकार के साथ var
को प्रतिस्थापित करने की कोशिश कर रहा हूं।
var i=1;
हो जाना चाहिए:
int i=1;
अनुमानित प्रकार इसके बारे में पता करना आसान है। लेकिन चूंकि यह हिस्सा अर्थपूर्ण मॉडल में होता है, इसलिए मुझे ITypeSymbol
मिलता है। प्रतिस्थापन वाक्यविन्यास मॉडल में होता है, इसलिए मुझे TypeSyntax
की आवश्यकता है। चूंकि मुझे एक फूला हुआ नाम नहीं चाहिए (global::System.Int32
), रूपांतरण संदर्भ निर्भर है (using
, नेस्टेड प्रकार इत्यादि)।
रोज़लीन का हिस्सा है जो विजुअल स्टूडियो संस्करण में पहले से ही "सरलीकृत प्रकार का नाम" क्विकफ़िक्स में यह कार्यक्षमता है, लेकिन नमूने को देखकर मुझे यह रूपांतरण करने का एक आसान तरीका नहीं मिला।
केविन Pilch-Bisson के जवाब के आधार पर मैं अब उपयोग कर रहा हूँ:
var location = document.GetSyntaxTree().GetLocation(node);
string name = variableType.ToMinimalDisplayString((Location)location, (SemanticModel)document.GetSemanticModel());
एक स्थान जो ToMinimalDisplayString
एक CommonSyntaxTree
से प्राप्त किया जा सकता है।
एक अतिरिक्त उलझन है कि ToMinimalDisplayString
, कक्षाएं Location
और SemanticModel
की आवश्यकता है, जबकि document.GetSemanticModel()
और CommonSyntaxTree.GetLocation
केवल एक अंतरफलक वापसी है।
मैंने कक्षाओं को आसानी से कास्टिंग करके काम किया, जो अब के लिए काम करता है।
हम्म ऐसा लगता है कि कक्षाएं सी # विशिष्ट हैं, और इंटरफेस भाषा स्वतंत्र हैं।
मैं GitHub पर एक काम संस्करण अपलोड कर दिया है: https://github.com/CodesInChaos/Roslyn
यह एक foreach
में var
लिए काम नहीं करता है, लेकिन मुझे लगता है कि वर्तमान रोसलिन निर्माण की एक सीमा है।
पुन: आपका अंतिम विवरण: सही; सीटीपी निर्माण को अंतिम रूप देने से पहले हमें 'foreach 'में पूरी तरह कार्यान्वित नहीं किया गया था, क्षमा करें। –