KingOfMazes
KingOfMazes

Reputation: 130

c# CodeDOM - Initialize array

I'm trying to create a simple dll runtime, using CodeDOM. I have quite understand what I need to finish this simple test application.

I need to create with CodeDOM object this statement:

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

I'm just having this statement for declaration of a List of n values, but find nowhere the instructions for reach what I need.

This is my actual code:

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

How to initialize a list (or an array) with some default values?

Thank you in advance.

Upvotes: 1

Views: 877

Answers (1)

Andy Jones
Andy Jones

Reputation: 604

As suggested, the answer lies in CodeArrayCreateExpression.

Here is the completed (working) code snippet:

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

The important part is the new initialiseExpression variable that defines the array.

Upvotes: 1

Related Questions