c# - How to get method definition using Roslyn? -
-
सदस्य घोषणा से सिंटेक्स ऑब्जेक्ट से अकेले विधि कैसे प्राप्त करें?
-
एक विधि परिभाषा से रिक्त स्थान के साथ सिंगल लाइन और मल्टीलाइन टिप्पणियों को कैसे बदलें।
क्या हम इसे सिंटैक्स टीविया लिस्ट के साथ कर सकते हैं
यहां मैंने किसी ऑब्जेक्ट को सिंटैक्स ट्राइविया लिस्ट को नहीं सौंपा। क्या हमारे शरीर की परिभाषा से सामान्य ज्ञान प्राप्त करने के लिए कोई विधि है?
-
अकेले विधि नाम कैसे प्राप्त करें।
निजी स्ट्रिंग GetMethodsInSourceFile (स्ट्रिंग फ़ाइलनाम) {SyntaxTree tree = SyntaxTree.ParseFile (fileName); Var root = (CompilationUnitSyntax) पेड़। GetRoot (); IEnumerable & LT; Roslyn.Compilers.CSharp.SyntaxNode & gt; syntaxNodes; SyntaxNodes = रूट में विधि विकिपीडिया से। DescendantNodes ()। जहां (एक्स = & gt; x है MethodDeclarationSyntax || x संपदा DeclarationSyntax है) विधि का चयन करें; अगर (सिंटेक्सनोड! = नल & amp; सिंटेक्स नोड्स.काउंट () & gt; 0) {foreach (सिंटैक्स नोड्स में सदस्य डिसक्लेशेशन सिंटैक्स विधि) {if (method! = Null) {SyntaxTriviaList trivia; अगर (सामान्य ज्ञान! = नल) {if (trivia.Count! = 0) {foreach (सामान्य ज्ञान में SyntaxTrivia टी) {if ((t.Kind == SyntaxKind.DocumentationCommentTrivia) || (t.Kind == SyntaxKind.SingleLineCommentTrivia) || (टी। केंड == सिंटैक्सकंड.मल्टीलिनी कॉममेंटट्रिविया)) {सदस्य डिसक्रेलेशन सिंटैक्स नईएल्टरमध्य = विधि। रीप्लेट्रिविया (टी, सिंटैक्सट्रिवियालिस्ट.एप्टी); यदि (newAlterMethod.ToFullString ()। ToUpper ()। इसमें शामिल है ("पीआर_")) {methodsInSrceFileContainsProc.Add (newAlterMethod.ToString ()); }}}} और {methodsInSourceFile.Add (method.ToFullString ()); अगर (method.ToFullString ()। ToUpper ()। इसमें शामिल है ("पीआर_")) {methodsInSrceFileContainsProc.Add (method.ToString ()); }}}}}} वापसी स्ट्रिंग। खाली; }
मैं मानता हूँ कि तुम नहीं पूरी तरह से योग्य नाम की आवश्यकता है यदि आप करते हैं, तो आपको सिंटैक्स एपीआई के बजाय सिमेंटिक मॉोडल एपीआई का उपयोग करना होगा।
एक विधि का नाम प्रदर्शित करने के लिए, MethodDeclarationSyntax
पर डालें और का उपयोग करें पहचानकर्ता
संपत्ति।
एक संपत्ति का नाम प्रदर्शित करने के लिए, संपदा DeclarationSyntax
पर डालें और पहचानकर्ता
संपत्ति का उपयोग करें।
var tree = CSharpSyntaxTree.ParseText (@ "सार्वजनिक वर्ग नमूना {सार्वजनिक स्ट्रिंग FooProperty {get; set;} सार्वजनिक शून्य FooMethod () {}}"); Var सदस्य = पेड़। गेटरूट ()। DescendantNodes ()। OfType & lt; MemberDeclarationSyntax & gt; (); विदेशी मुद्रा (सदस्यों में भिन्न सदस्य) {var गुण = सदस्य संपत्ति संपुष्टीकरण सिंटैक्स; अगर (संपत्ति! = नल) कंसोल.प्रकाश रेखा ("संपत्ति:" + property.Identifier); विधि विधि = सदस्य विधि के रूप में; अगर (विधि! = नल) कंसोल.प्रकाश रेखा ("विधि:" + method.Identifier); }
फॉलो-अप प्रश्न है "सदस्य डिप्लोरेशन सिंटैक्स में एक पहचानकर्ता
संपत्ति क्यों नहीं है?
सदस्यअनुक्रमणण संवेदना
है केवल तरीकों और गुणों से अधिक के लिए बेस क्लास। विशेषकर, यह BaseFieldDeclarationSyntax
के लिए आधार वर्ग है। फील्ड घोषणाओं में हमेशा एक स्पष्ट पहचानकर्ता नहीं होता है।
उदाहरण के लिए, क्या निम्नलिखित फ़ील्ड के लिए पहचानकर्ता होना चाहिए? इसमें दो नाम हैं।
वर्ग का नमूना {निजी स्ट्रिंग फ़ील्ड ओ, फ़ील्ड} दो
उम्मीद है कि यह इसे साफ़ करता है आपके लिए।
Comments
Post a Comment