问题描述
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
SyntaxNode root = await CSharpSyntaxTree.ParseText("int i= 0;").GetRootAsync(token);
我看到了文档
Inheritance->Object->SyntaxNode->
CSharpSyntaxNode->
MemberDeclarationSyntax->BaseFieldDeclarationSyntax->FieldDeclarationSyntax
private ClassDeclarationSyntax _classDeclaration;
我想将SyntaxNode转换为FieldDeclarationSyntax,然后将其添加到ClassDeclarationSyntax。
我应该如何处理?
解决方法
您可以使用以下方法做您想要的事情:
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Linq;
VariableDeclarationSyntax variableDeclaration = CSharpSyntaxTree.ParseText("int i= 0;")
.GetRoot()
.DescendantNodes()
.OfType<VariableDeclarationSyntax>()
.Single();
_classDeclaration = _classDeclaration
.WithMembers(
SyntaxFactory.SingletonList<MemberDeclarationSyntax>(
SyntaxFactory.FieldDeclaration(variableDeclaration)));
您首先需要通过解析来创建变量声明语法。然后下降根节点以检索它。然后将该节点附加到新的FieldDeclaration。虽然我很好奇您在这里想做什么。如果需要帮助更改树的代码,则使用SyntaxRewriter类型。在Microsoft.CodeAnalysis.Editing命名空间下,还有通用的Codefix基础结构和SyntaxEditor。