无法使用Roslyn以编程方式向成员添加成员

时间:2014-02-11 14:07:56

标签: c# roslyn

我尝试使用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);

但没有回应。 我怎么能这样做?

1 个答案:

答案 0 :(得分:8)

Roslyn语法树是不可变的,因此Add方法返回一个新的SyntaxList,它不会在适当的位置更新它。你可能想要像

这样的东西
var newClass = lClassDeclarationSyntax
.WithMembers(lClassDeclarationSyntax.Members.Add(lMethodDeclarationSyntax));

我们正在努力使方法名称更清晰。

相关问题