Roslyn - 用完全限定名称

时间:2017-03-30 10:09:41

标签: c# roslyn

如何使用完全限定名称替换c#代码块中的所有名称?打算用合格的名称替换所有使用。 我知道使用别名声明可能会很棘手,但在我们的情况下情况并非如此。

1 个答案:

答案 0 :(得分:1)

根据您的需要,您可以将此作为CodeFixProviderSyntaxRewriter实施。在任何情况下,请看这里开始:https://joshvarty.wordpress.com/2014/08/15/learn-roslyn-now-part-5-csharpsyntaxrewriter/

除了上下文之外,您很可能需要处理符号为InvocationExpressionSyntaxIMethodSymbolReducedExtension的{​​{1}}个节点作为方法类型:

var inv = (InvocationExpressionSyntax)node;
var symbol = semanticModel.GetSymbolInfo(inv).Symbol as IMethodSymbol;
if (symbol.MethodKind == MethodKind.ReducedExtension)
{
  ...
}

然后您需要将InvocationExpressionSyntax重写为另一个。这个网站对重写很有帮助:https://roslynquoter.azurewebsites.net/。您可以通过调用ToDisplayString()ToDisplayParts()来获取方法的全名。

此外,您需要将第一个参数传递给新调用,因此您需要获取调用调用的表达式:((MemberAccessExpressionSyntax)inv.Expression).Expression

你可以从这些方面开始,如果你遇到困难,那么你可以回答问题。