gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:30:25 24 4
gpt4 key购买 nike

有什么方法可以使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com