从对象InitializerExpressionSyntax生成属性初始化程序的代码

时间:2016-06-24 00:57:33

标签: c# code-generation roslyn

更新:需要这个的原因是我需要创建复杂的对象,深度嵌套像文档对象模型。我不知道是否所有属性都已初始化,真的想看看我是否错过了一个属性,特别是在深度嵌套时。

换句话说,我需要查看完整的对象树是否已经初始化,或者我错过了某处的属性。

我们可以使用Roslyn仅从代码生成对象InitializerExpressionSyntax吗?不要像在这篇文章中那样尝试反编译对象:Can Roslyn generate source code from an object instance?

它适用于复杂/嵌套对象吗?

1 个答案:

答案 0 :(得分:0)

编写程序或使用T4模板从代码生成代码。

var code = @"public partial class Abc { public string AAA { get; set; } }";
var syntaxTree = CSharpSyntaxTree.ParseText(code);
var syntax = (CompilationUnitSyntax)syntaxTree.GetRoot();

var @class = syntax.ChildNodes().OfType<ClassDeclarationSyntax>().First();
var properties = @class.ChildNodes().OfType<PropertyDeclarationSyntax>();
foreach (var property in properties)
{
    ...
}