Динамически создать массив и установить элементы - PullRequest
8 голосов
/ 26 января 2012

Это может создать массив динамически:

Assembly asm = object.GetType().Assembly;
string sTypeName = "Company.Namespace.ClassName";
object arrayWithSize1 = Activator.CreateInstance( asm.GetType(sTypeName), 1 );

Но как установить первый элемент массива, созданный выше?

Ответы [ 2 ]

13 голосов
/ 26 января 2012

Вы можете использовать Array.SetValue:

 // How are you going to create this? Activator.CreateInstance?
 object instance = ...

 // Create one-dimensional array of length 1.
 Array arrayWithSize1  = Array.CreateInstance(asm.GetType(sTypeName), 1);

 // Set first (only) element of the array to the value of instance.
 arrayWithSize1.SetValue(instance, 0);
7 голосов
/ 26 января 2012

Вы можете просто использовать ключевое слово dynamic, чтобы сделать код более читабельным, чем вызовы отражения:

var arrayType = typeof(int);
dynamic array = Array.CreateInstance(arrayType, 1);
array[0] = 123;
...