每当您在 C# 中分配一个新数组时
new T[length]
数组条目设置为 T的默认值。如果是值类型,则null
适用于T
引用类型或默认构造函数的结果的情况。T
T
在我的情况下,我想Int32
用值 -1 初始化一个数组:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
因此,在为数组保留内存之后,CLR 循环遍历新分配的内存并将所有条目设置为 default(int) = 0。之后,我的代码将所有条目设置为 -1。
这使得初始化变得多余。JIT 是否检测到这一点并忽略初始化为 0,如果没有,有没有办法用自定义值直接初始化一部分内存?
参考C# 数组初始化 - 使用非默认值,使用Enumerable.Repeat(value, length).ToArray()
是没有选项,因为Enumerable.ToArray
分配一个新数组并随后将值复制到它。