【发布时间】:2010-10-13 12:35:59
【问题描述】:
每当您在 C# 中使用
分配一个新数组时new T[length]
数组条目设置为默认的T。即null,如果T是引用类型或T的默认构造函数的结果,如果T是值类型.
在我的例子中,我想用值 -1 初始化一个 Int32 数组:
var myArray = new int[100];
for (int i=0; i<myArray.Length; i++) { myArray[i] = -1; }
因此,在为数组保留内存之后,CLR 循环遍历新分配的内存并将所有条目设置为 default(int) = 0。之后,我的代码将所有条目设置为 -1。
这使得初始化变得多余。 JIT 是否检测到这一点并忽略初始化为 0,如果没有,有没有办法直接用自定义值初始化一部分内存?
引用C# Array initialization - with non-default value ,使用Enumerable.Repeat(value, length).ToArray() 是不行的,因为Enumerable.ToArray 分配一个新数组,然后将值复制到它。
【问题讨论】:
-
如果你有字节数组,那么P/Invoke could help。但是,如果数组元素大小大于字节(如您的情况) - 此方法将无济于事。
标签: c# arrays initialization constants