c # CodeDOM - инициализировать массив - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь создать простую среду выполнения DLL, используя CodeDOM.Я вполне понимаю, что мне нужно, чтобы закончить это простое тестовое приложение.

Мне нужно создать с объектом CodeDOM этот оператор:

List<string> test = new List<string>() {"A", "B", ... }

У меня просто есть этот оператор для объявления списка из n значений, но нигде не найти инструкций для достижения того, что янужно.

Это мой настоящий код:

CodeCompileUnit compileUnit = new CodeCompileUnit();            
CodeNamespace samples = new CodeNamespace("ClassLibrary1");

compileUnit.Namespaces.Add(TestNamespace);

samples.Imports.Add(new CodeNamespaceImport("System"));
samples.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));            
samples.Imports.Add(new CodeNamespaceImport("System.Text"));            

CodeTypeDeclaration _class = new CodeTypeDeclaration("TestClass");

CodeMemberField _field = new CodeMemberField();
_field.Attributes = MemberAttributes.Private;
_field.Name = "_testMember";
_field.Type = new CodeTypeReference(typeof(List<string>));

//This is where I cannot understand how to insert the values
_field.InitExpression = new CodeObjectCreateExpression(new CodeTypeReference(typeof(List<string>)), new CodePrimitiveExpression(64));            

class1.Members.Add(_field);

Как инициализировать список (или массив) с некоторыми значениями по умолчанию?

Заранее спасибо.

1 Ответ

0 голосов
/ 31 мая 2018

Как и предполагалось, ответ лежит в CodeArrayCreateExpression.

Вот приведенный (рабочий) фрагмент кода:

        CodeCompileUnit compileUnit = new CodeCompileUnit();
        CodeNamespace samples = new CodeNamespace("ClassLibrary1");

        compileUnit.Namespaces.Add(samples);

        samples.Imports.Add(new CodeNamespaceImport("System"));
        samples.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));
        samples.Imports.Add(new CodeNamespaceImport("System.Text"));

        CodeTypeDeclaration _class = new CodeTypeDeclaration("TestClass");

        CodeMemberField _field = new CodeMemberField();
        _field.Attributes = MemberAttributes.Private;
        _field.Name = "_testMember";
        _field.Type = new CodeTypeReference(typeof(List<string>));

        var initialiseExpression = new CodeArrayCreateExpression(
            new CodeTypeReference(typeof(string)),
            new CodePrimitiveExpression("A"),
            new CodePrimitiveExpression("B"),
            new CodePrimitiveExpression("C"));
        _field.InitExpression = new CodeObjectCreateExpression(new CodeTypeReference(typeof(List<string>)), initialiseExpression);
        _class.Members.Add(_field);

Важной частью является новая переменная initialiseExpression, которая определяет массив.

...