数组中成员的默认值是多少?

dyl*_*ert 28 c# arrays member default-value

我实例化一个这样的数组:

int array[] = new int[4];
Run Code Online (Sandbox Code Playgroud)

这四个成员的默认值是什么?它是null,0还是不存在?

Jon*_*eet 50

它是0.它不能为null,因为null不是有效值int.

从C#5规范的第7.6.10.4节:

新数组实例的所有元素都初始化为其默认值(第5.2节).

从第5.2节开始:

变量的默认值取决于变量的类型,并确定如下:

  • 对于value-type的变量,默认值与value-type的默认构造函数(第4.1.2节)计算的值相同.
  • 对于reference-type的变量,默认值为null.

初始化为默认值通常通过让内存管理器或垃圾收集器在分配使用之前将内存初始化为所有位为零来完成.因此,使用all-bits-zero来表示空引用是很方便的.

(作为一个实现细节,第一个要点周围有一些棘手的问题.虽然C#本身不允许你为值类型声明一个无参数构造函数,但你可以为IL中的值类型创建自己的无参数构造函数.我不相信这些构造函数在数组初始化中调用,但它们new X()在C#中的表达式中调用.但它确实超出了C#规范的范围.)

  • 当我加载此页面时,它说“ 1分钟前问”,“ 59秒钟前回答”。证明Jon Skeet确实是机器人吗?;) (3认同)
  • @TimGoodman:看时间戳,我想我在问了问题后49秒就回答了(最初是简短的版本)。仍有改进的空间。 (3认同)

Eri*_*ert 16

类型的自动初始化变量的默认值(T例如数组元素或实例字段)与值的默认值相同default(T).对于引用类型和指针类型,它为null.对于数字类型,它是该类型的零.对于布尔来说,这是错误的.对于struct类型,struct值将其所有字段初始化为其默认值.

  • 出于兴趣,C# 团队是否(是否)曾明确考虑或关心用其他语言编写的具有“非默认”无参数构造函数的结构? (2认同)

Dou*_*las 5

来自数组(C# 编程指南)

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