如何使用Roslyn获取方法定义?
-
如何从MemberDeclarationSyntax对象单独获取方法声明?
-
如何用空的方法定义替换单行和多行注释。
我们可以用SyntaxTriviaList做到这一点。
这里我没有为SyntaxTriviaList分配任何对象。 我们有什么方法吗?
从身体的定义获得琐事信息。 -
如何单独获取方法名称。
private string GetMethodsInSourceFile(string fileName) { SyntaxTree tree = SyntaxTree.ParseFile(fileName); var root = (CompilationUnitSyntax)tree.GetRoot(); IEnumerable syntaxNodes; syntaxNodes = from methodDeclaration in root.DescendantNodes() .Where(x => x is MethodDeclarationSyntax || x is PropertyDeclarationSyntax) select methodDeclaration; if (syntaxNodes != null && syntaxNodes.Count() > 0) { foreach (MemberDeclarationSyntax method in syntaxNodes) { if (method != null) { SyntaxTriviaList trivia; if (trivia != null) { if(trivia.Count!=0) { foreach (SyntaxTrivia t in trivia) { if((t.Kind==SyntaxKind.DocumentationCommentTrivia) || (t.Kind==SyntaxKind.SingleLineCommentTrivia) || (t.Kind==SyntaxKind.MultiLineCommentTrivia)) { MemberDeclarationSyntax newAlterMethod=method.ReplaceTrivia(t, SyntaxTriviaList.Empty); if (newAlterMethod.ToFullString().ToUpper().Contains("PR_")) { methodsInSrceFileContainsProc.Add(newAlterMethod.ToString()); } } } } else { methodsInSourceFile.Add(method.ToFullString()); if (method.ToFullString().ToUpper().Contains("PR_")) { methodsInSrceFileContainsProc.Add(method.ToString()); } } } } } } return string.Empty; }
我假设你不需要完全限定的免费精选名字大全。 如果这样做,您将不得不使用SemanticModel API而不是语法API。
要显示方法的名称,请转换为MethodDeclarationSyntax
并使用Identifier
属性。
要显示属性的名称,请转换为PropertyDeclarationSyntax
并使用Identifier
属性。
var tree = CSharpSyntaxTree.ParseText(@" public class Sample { public string FooProperty {get; set;} public void FooMethod() { } }"); var members = tree.GetRoot().DescendantNodes().OfType(); foreach (var member in members) { var property = member as PropertyDeclarationSyntax; if (property != null) Console.WriteLine("Property: " + property.Identifier); var method = member as MethodDeclarationSyntax; if (method != null) Console.WriteLine("Method: " + method.Identifier); }
后续问题是“为什么MemberDeclarationSyntax没有Identifier
属性?
MemberDeclarationSyntax
不仅仅是方法和属性的基类。 特别是,它是BaseFieldDeclarationSyntax
的基类。 字段声明并不总是有明确的标识符。
例如,以下字段应该是什么标识符? 它有两个免费精选名字大全。
class Sample { private string fieldOne, fieldTwo; }
希望这能为你清除它。
上述就是C#学习教程:如何使用Roslyn获取方法定义?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1009288.html