我尝试使用 Roslyn 向类中添加一个方法。
我解析 .cs 文件并获得决定的类。
SyntaxTree tree = SyntaxTree.ParseFile(Path);
CompilationUnitSyntax root = (CompilationUnitSyntax)tree.GetRoot();
MemberDeclarationSyntax firstMember = root.Members[0];
TypeDeclarationSyntax lClassDeclarationSyntax = (TypeDeclarationSyntax)NamespaceDeclaration.Members[1];
然后我创建一个 MemberDeclaration 类型的实例
MethodDeclarationSyntax lMethodDeclarationSyntax= Syntax.MethodDeclaration(
Syntax.List<AttributeListSyntax>(),
Syntax.TokenList(),
Syntax.IdentifierName("MemoryStream"),
null,
Syntax.Identifier("Serialize"),
null,
Syntax.ParameterList(),
Syntax.List<TypeParameterConstraintClauseSyntax>(),
Syntax.Block(lList));
其中 lList
是方法的主体。
然后我尝试将这个实例添加到类中
lClassDeclarationSyntax.Members.Add(lMethodDeclarationSyntax);
但没有回应。 我该怎么做?
最佳答案
Roslyn 语法树是不可变的,因此 Add 方法返回一个新的 SyntaxList,它不会就地更新它。你可能想要像
var newClass = lClassDeclarationSyntax
.WithMembers(lClassDeclarationSyntax.Members.Add(lMethodDeclarationSyntax));
这是我们正在努力使方法名称更清晰的内容。
关于c# - 无法使用 Roslyn 以编程方式将成员添加到类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704148/