如何在运行时创建任意Array类型的实例?

Cra*_*des 30 c# reflection compact-framework .net-2.0

我正在尝试在编译时反序列化一个未知类型的数组.在运行时我发现了类型,但我不知道如何创建实例.

就像是:

Object o = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为没有无参数构造函数,Array似乎没有任何构造函数.

Jon*_*eet 57

使用Array.CreateInstance.

  • Type.GetElementType() (8认同)
  • 是的,传入*element*类型,而不是最终的数组类型. (3认同)
  • 这个问题很轻微.如果我知道类型是System.String []和我的Array.CreateInstance()我得到一个System.String [] [] (2认同)

Ant*_*nes 12

您可以使用Array的CreateInstance重载之一,例如: -

object o = Array.CreateInstance(type, 10);
Run Code Online (Sandbox Code Playgroud)


Arg*_*a C 5

相当旧的帖子,但在回答一个新问题时,虽然发布了创建多维数组的相关示例。

例如,假设类型 ( elementType) asint和一个二维数组。

var size = new[] { 2, 3 };                
var arr = Array.CreateInstance(typeof(int), size);
Run Code Online (Sandbox Code Playgroud)

例如,当它是二维时,它可以填充为

var value = 1;
for (int i = 0; i < size[0]; i++)
    for (int j = 0; j < size[1]; j++)
        arr.SetValue(value++, new[] { i, j });
//arr = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]
Run Code Online (Sandbox Code Playgroud)