c# - 无法使用 Roslyn 以编程方式将成员添加到类中

标签 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);

但没有回应。 我该怎么做?

最佳答案

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

var newClass = lClassDeclarationSyntax
.WithMembers(lClassDeclarationSyntax.Members.Add(lMethodDeclarationSyntax));

这是我们正在努力使方法名称更清晰的内容。

关于c# - 无法使用 Roslyn 以编程方式将成员添加到类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704148/

相关文章:

c# - 检查ClassDeclarationSyntax是否实现了特定接口(interface)(Standalone代码分析工具)

c# - 调用扩展方法时的隐式转换是不可能的

c# - 大对象堆分片

c# - 如何将一个数组项属性值设置为对另一个项的引用的 C# 数组转换为 JSON

c# - 正则表达式模式中的相同变量

c# - 从 roslyn 中的符号获取类型

c# - 验证 MVVM 中的空字段

c# - OrderBy异常 "At least one object must implement IComparable"

c# - 在 C# Interactive 中取消转义字符串

c# - 为什么 C# 编译器不能将文字负值转换为枚举?