什么是声明的对象数组的默认值?

时间:2016-02-17 14:56:36

标签: c# arrays

Obj[] array = new Obj[10];

这个数组中每个对象的默认值是什么? 因为我希望它为null并且我不确定它是否已经是它们的值,或者我需要在循环中将它们中的每一个设置为null。

4 个答案:

答案 0 :(得分:5)

是的,the online documentation says so

  

数值数组元素的默认值设置为零,引用元素设置为null。

C# specification(第1.8节阵列)更具体:

  

new运算符会自动将数组的元素初始化为其默认值,例如,对于所有数值类型,该值为零;对于所有引用类型,该值为null。

答案 1 :(得分:1)

这在很大程度上取决于对象Obj的类型。如果它是引用类型,则值为null。如果是值类型,则值为not null

更一般地,数组的值初始化为default(ObjClass)分别default(ObjStruct)或通常default(anyTypeHere)

返回的值

实施例

class Program
{
    static void Main()
    {
        ObjStruct[] array = new ObjStruct[10];
        Console.WriteLine(array[0].Test);

        ObjClass[] array = new ObjClass[10];
        Console.WriteLine(array[0].Test); //NullReferenceException
    }
}

public class ObjClass
{
    public string Test { get { return "Not null"; } }
}

public struct ObjStruct
{
    public string Test { get { return "Not null"; } }
}

答案 2 :(得分:0)

使用类型default(T)的默认值初始化每个数组元素。

如果它是引用类型,则为null,如果它是值类型,则对于intlongdouble等类型,则为0 struct字段的大小写初始化为默认值。

答案 3 :(得分:0)

默认情况下为null。 如果你将使用扩展类型,你可以在这里看到更多解释 https://msdn.microsoft.com/en-us/library/83fhsxwc.aspx