2016-06-27 3 views
2

Мне нужен тип массива из n элементов типа, заданного в переменной типа. Я получаю обойти эту проблему, как это:Преобразование типа C# в тип массива типа

Type foo; 
int n; 

Type newType=(Array.CreateInstance(foo,n)).GetType(); 

Это работает, но это не значит, что я на самом деле создает неиспользованное массив просто получить его тип. Я уверен, что должен быть лучший способ!

+0

Вы уверены, что вам нужно, чтобы получить «тип элемента» как 'type' например? Может быть, вы могли бы использовать общий класс вместо этого, а затем просто сделать 'TFoo []'? Это просто мысль, она полностью зависит от того, как построена вся ваша система типов :) – Luaan

ответ

5

Вы можете использовать Type.MakeArrayType():

Type foo = typeof(Foo); 
Type arrayType = foo.MakeArrayType(); 

Это возвращает Type из одномерного массива Foo. length массива не относится к типу.

Для многомерных массивов можно использовать this overload

Type foo = typeof(Foo); 
int dimensions = 5; 
Type arrayType = foo.MakeArrayType(dimensions); 
+0

foo.MakeArrayType() - именно то, что мне нужно. Благодарю. –

Смежные вопросы