c# - 使用 Roslyn 向类添加新字段声明

标签 c# roslyn roslyn-code-analysis

有什么方法可以使用 roslyn 将成员添加到类中?我想补充:

public int number {get;set;}

更新 我使用了这段代码:

       PropertyDeclarationSyntax o =  
       SyntaxFactory.PropertyDeclaration(SyntaxFactory.ParseTypeName("public  
       System.Windows.Forms.Timer"), "Ticker { get; set; }");

       var newRoot = root.ReplaceNode(oldMethod, oldMethod.AddMembers(o));
       newRoot = Formatter.Format(newRoot, new AdhocWorkspace());

       File.WriteAllText(file, newRoot.ToFullString());

但是结果是这样的:

   public class ClassChild
{
    public int n;
    private int n2;

    public void method1()
    {
        string c = "";
        Console.WriteLine();
    }

public System.Windows.Forms.TimerTicker { get; set; }
}

我想内联 public System.Windows.Forms.TimerTicker { get;放; } 与 n 和 n2。我该怎么做?

最佳答案

查看代码

    private PropertyDeclarationSyntax MakeProperty()
    {
        string name = "n";

        // Create an auto-property
        var property =
            SyntaxFactory.PropertyDeclaration(SyntaxFactory.ParseTypeName("int"), name)
            .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
            .AddAccessorListAccessors(
                SyntaxFactory.AccessorDeclaration(SyntaxKind.GetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken)),
                SyntaxFactory.AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(SyntaxFactory.Token(SyntaxKind.SemicolonToken))
            );

        return property;
    }

    private async Task<Document> AddProperty(Document document, ClassDeclarationSyntax classeDecl, CancellationToken cancellationToken)
    {
        var root = await document.GetSyntaxRootAsync(cancellationToken);
        var newClass = classeDecl.AddMembers(MakeProperty());
        return document.WithSyntaxRoot(root.ReplaceNode(classeDecl, newClass));
    }

自动属性生成示例取自 this问题。

关于c# - 使用 Roslyn 向类添加新字段声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160694/

相关文章:

c# - Roslyn - 在不保留优先级的 SyntaxNode 上调用 ToString

c# - 为什么闭包对于使用声明的 C# 8.0 中的变量不同?

c# - Microsoft.CodeAnalysis.TypeKind 枚举中的 TypeKind.Submission 和 TypeKind.Module 是什么意思?

c# - 如何获取从 Roslyn 中提取的 C# 解析器(语法树)

C# Roslyn 编译器 - 如何从 IdentifierNameSyntax 获取类型的命名空间?

c# - 如何使用 Roslyn 独立分析从别名获取类型

c# - C# 中同一语句中的多个异步调用

c# - 打印 Winform/可视元素

c# - 如何设置 web.config 并使用 ASP.NET ResetPassword() 方法

c# - 如何在不触发无限循环的情况下编写 FileSystemWatcher