【问题标题】:Why does my dynamically created array of custom types return with null value instances?为什么我动态创建的自定义类型数组返回空值实例?
【发布时间】:2013-01-11 16:36:15
【问题描述】:

所以我创建了这个简单的代码来动态创建一个数组 - 期望索引 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);
    }
}

【问题讨论】:

  • 你有理由不直接说myclass[] r = new myclass[2]吗?它做同样的事情,但代码更少,并确保数组是强类型的。

标签: c# arrays createinstance


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    以这门课为例。

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

    使用以下代码:

    var array = new Foo[10];
    

    您将获得一个Foo[],其中包含十个null 元素。原因上面已经解释过了。

    【讨论】:

    • 我希望编译器生成的默认构造函数生成一个对象数组,类似于您在声明中找到的对象数组: var x = new myclass();在这种情况下,a=0、b=null 和 c=0.0
    • @Stratton 如果您的myclass 被声明为struct,就会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2017-04-03
    • 1970-01-01
    • 2015-09-17
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多