为什么`new int [x] {}`不会有效?

IAb*_*act 1 c# arrays opensuse monodevelop

在MonoDevelop中,我有以下代码编译:

int[] row = new int[indices.Count]{};
Run Code Online (Sandbox Code Playgroud)

但是,在运行时,我得到:

Matrix.cs(53,53):错误CS0150:预期的常量值(CS0150)(testMatrix)

我知道这个错误意味着什么并强迫我调整数组的大小:

int[] row = new int[indices.Count]{};
Array.Resize(ref row, rowWidth);
Run Code Online (Sandbox Code Playgroud)

这是我必须处理的事情,因为我在Linux上使用MonoDevelop?我确信在.Net 3.5下我能够使用包含数组宽度的变量初始化数组.任何人都可以确认这是孤立的吗?如果是这样,我可以向bugzilla报告错误.

LBu*_*kin 13

您不能将数组创建语法与对象初始化语法混合使用.删除{ }.

当你写:

int[] row = new int[indices.Count];
Run Code Online (Sandbox Code Playgroud)

您正在创建一个indices.Count初始化为默认值的新数组.

当你写:

int[] row = new int[] { 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)

您正在创建一个数组,然后将其内容初始化为值[1,2,3,4].数组的大小是从元素的数量推断出来的.它是以下的简写:

int[] row = new int[4];
row[0] = 1;
row[1] = 2;
row[2] = 3;
row[3] = 4;
Run Code Online (Sandbox Code Playgroud)

该数组仍然首先被初始化为默认值,这种语法只是提供了一种速记,以避免havind自己编写这些额外的赋值.