我尝试使用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);
但没有回应。 我怎么能这样做?
答案 0 :(得分:8)
Roslyn语法树是不可变的,因此Add方法返回一个新的SyntaxList,它不会在适当的位置更新它。你可能想要像
这样的东西var newClass = lClassDeclarationSyntax
.WithMembers(lClassDeclarationSyntax.Members.Add(lMethodDeclarationSyntax));
我们正在努力使方法名称更清晰。