如何使用完全限定名称替换c#代码块中的所有名称?打算用合格的名称替换所有使用。 我知道使用别名声明可能会很棘手,但在我们的情况下情况并非如此。
答案 0 :(得分:1)
根据您的需要,您可以将此作为CodeFixProvider
或SyntaxRewriter
实施。在任何情况下,请看这里开始:https://joshvarty.wordpress.com/2014/08/15/learn-roslyn-now-part-5-csharpsyntaxrewriter/
除了上下文之外,您很可能需要处理符号为InvocationExpressionSyntax
且IMethodSymbol
为ReducedExtension
的{{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
。
你可以从这些方面开始,如果你遇到困难,那么你可以回答问题。