所以我创建了这个简单的代码来动态创建一个数组 - 期望在索引0和1处有两个“空/未初始化”的对象。但是我得到一个变量为r的对象数组,它们都是null?
我错过了一些如此根本的东西......我不明白。 提前谢谢。
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);
}
}
答案 0 :(得分:2)
这就是数组的工作方式。它们最初填充了default(TheTypeOfTheArray)
,对于所有引用类型(这是引用类型),它都是null
。
答案 1 :(得分:0)
创建数组并不意味着初始化其对象。例如,如果ConsoleApplication1.myclass
没有无参数构造函数,那么您希望CLR如何隐式地创建它的实例?
比如上课。
class Foo
{
public Foo(int value)
{
Value = value;
}
public int Value { get; set; }
}
使用以下代码:
var array = new Foo[10];
您将获得一个Foo[]
,其中包含十个null
个元素。原因如上所述。