How do I create a C# array using Reflection and only type info? [duplicate] How do I create a C# array using Reflection and only type info? [duplicate] arrays arrays

How do I create a C# array using Reflection and only type info? [duplicate]


You need Type.GetElementType() to get the non-array type:

object x = new Int32[7];Type t = x.GetType();object y = Array.CreateInstance(t.GetElementType(), 7);

Alternatively, if you can get the type of the element directly, use that:

Type t = typeof(int);object y = Array.CreateInstance(t, 7);

Basically, Array.CreateInstance needs the element type of the array to create, not the final array type.


Just to add to Jon's answer. The reason attempt 1 fails is because there's no default constructor for Int32[]. You need to supply a length. If you use the overload, which takes an array of arguments it will work:

// attempt1 object y1 = Activator.CreateInstance(t, new object[] { 1 }); // Length 1