为什么我动态创建的自定义类型数组返回null值实例

本文关键字:返回 数组 null 实例 类型 自定义 动态 创建 为什么 | 更新日期: 2023-09-27 17:51:18

所以我创建了这个简单的代码来动态地创建一个数组-期望在索引0和1处有两个"空/未初始化"对象。然而,我得到了变量r中的一个对象数组,它们都是空的?

我错过了一些很重要的东西…我不明白。提前谢谢。

public class myclass
{
    int a;
    string b;
    float c;
}
class Program
{
    static void Main(string[] args)
    {
        Type t = Type.GetType("ConsoleApplication1.myclass");
        var r = Array.CreateInstance(t.GetElementType(), 2);
    }
}

为什么我动态创建的自定义类型数组返回null值实例

这就是数组的工作方式。它们最初使用default(TheTypeOfTheArray)填充,对于所有引用类型(这是一个引用类型)都是null

创建数组并不意味着初始化它的对象。例如,如果ConsoleApplication1.myclass没有无参数构造函数,您如何期望CLR隐式地创建它的实例?

以这门课为例。

class Foo
{
    public Foo(int value)
    {
        Value = value;
    }
    public int Value { get; set; }
}

使用以下代码:

var array = new Foo[10];

你会得到一个Foo[],里面有十个null元素。原因如上所述。