在CodeObjectCreateExpression中分配对象的属性值

时间:2019-02-06 10:42:29

标签: c# .net-core codedom

我需要使用CodeDOM创建这样的对象(见下文)。

internal static readonly Dynamic class1 = new Dynamic
{
    VendorId = "VTS",
    Test = 10.33f

};

我所做的尝试是在类Dynamic(使用CodeDOM创建)中创建一个构造函数(请参见下文),该构造函数将所有需要的值都设置为参数。使用Dynamic类的代码给出了一个错误,即它不能使用带有参数的构造函数(因为它是ML.NET的数据结构)

CodeConstructor constructor = new CodeConstructor();

constructor.Attributes = MemberAttributes.Public;

constructor.Parameters.Add(new CodeParameterDeclarationExpression(typeof(float), "test"));

CodeFieldReferenceExpression reference =
    new CodeFieldReferenceExpression(
        new CodeThisReferenceExpression(), "test");

constructor.Statements.Add(new CodeAssignStatement(reference, 
    new CodeArgumentReferenceExpression("test")));

targetClass.Members.Add(constructor);

如何使用CodeDOM在构造函数中不需要参数的情况下将值分配给属性?

1 个答案:

答案 0 :(得分:1)

借助@JeroenMostert在评论中的帮助,我找到了可以用作ML.NET数据结构的解决方案:

 CodeConstructor constructor = new CodeConstructor
        {
            Attributes = MemberAttributes.Public
        };


    foreach (var item in features)
        {
            CodeFieldReferenceExpression reference =
            new CodeFieldReferenceExpression(
                new CodeThisReferenceExpression(), item.Id);

            constructor.Statements.Add(new CodeAssignStatement(reference, new CodePrimitiveExpression(item.TestCase)));
        }

        targetClass.Members.Add(constructor);