我需要列出文件中找到的所有扩展方法.
这是我到目前为止所做的(看起来它正在工作):
var methods = nodes.OfType<MethodDeclarationSyntax>();
var extensionMethods = methods.Where(m =>
m.Modifiers.Any(t => t.Kind == SyntaxKind.StaticKeyword)
&& m.ParameterList.Parameters.Any(p =>
p.Modifiers.Any(pm => pm.Kind == SyntaxKind.ThisKeyword)));
Run Code Online (Sandbox Code Playgroud)
即使我无法测试所有情况,但看起来这样做有效.但我想知道是否有更简洁的方法来解决这个问题.
是否有某种IsExtension或一些SyntaxKind.ExtensionMethod?我看了看,但至少找不到任何明显的东西.
我正在使用最新的Roslyn Sept/12
您正在语法级别上工作,在此级别上没有“扩展方法”之类的东西。您可以做的是获取Symbol每种方法的语义信息(称为),然后您将在那里看到它是否是扩展方法。就像是:
SyntaxTree tree = …
var compilation = Compilation.Create("foo").AddSyntaxTrees(tree);
var model = compilation.GetSemanticModel(tree);
var methods = …
var extensionMethods =
methods.Where(m => model.GetDeclaredSymbol(m).IsExtensionMethod);
Run Code Online (Sandbox Code Playgroud)
这意味着您的代码实际上需要编译,并且您还必须向编译添加任何必要的引用。
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |