我想使用 Roslyn 加载 C# 源并将其写入另一个文件,用替代项替换关键字。示例:
for (int i=0; i<10; i++){}
翻译成
foobar (int i=0; i<10; i++){}
这种操作的语法是什么样的?
最佳答案
我不知道这样做的效果如何,但您可以将每个 ForKeyword
标记替换为另一个 ForKeyword
标记,但这次使用您的自定义文本。为此,您可以使用 CSharpSyntaxRewriter
:
class KeywordRewriter : CSharpSyntaxRewriter
{
public override SyntaxToken VisitToken(SyntaxToken token)
{
if (token.Kind() == SyntaxKind.ForKeyword)
{
return SyntaxFactory.Token(
token.LeadingTrivia, SyntaxKind.ForKeyword, "foobar", "foobar",
token.TrailingTrivia);
}
return token;
}
}
使用此重写器,您可以编写如下代码:
string code = "for (int i=0; i<10; i++){}";
var statement = SyntaxFactory.ParseStatement(code);
var rewrittenStatement = new KeywordRewriter().Visit(statement);
Console.WriteLine(rewrittenStatement);
哪个打印你想要的:
foobar (int i=0; i<10; i++){}
关于c# - 如何使用 Roslyn 将 C# 关键字替换为字符串替代项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26585869/