Назначьте значения свойств объекта в CodeObjectCreateExpression - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно создать подобный объект (см. Ниже) с использованием 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 голосов
/ 08 февраля 2019

С помощью @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);
...