1

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

int[] row = new int[indices.Count]{};

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

Matrix.cs(53,53): 错误 CS0150: 需要一个常量值 (CS0150) (testMatrix)

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

int[] row = new int[indices.Count]{};
Array.Resize(ref row, rowWidth);

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

4

4 回答 4

13

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

当你写:

int[] row = new int[indices.Count];

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

当你写:

int[] row = new int[] { 1, 2, 3, 4 };

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

int[] row = new int[4];
row[0] = 1;
row[1] = 2;
row[2] = 3;
row[3] = 4;

数组仍然首先初始化为 defaults,这种语法只是提供了一种简写方式,以避免您自己编写这些额外的赋值。

于 2010-05-16T21:45:25.817 回答
1

以下代码在 Windows/.NET/LINQPad 上因相同原因无法编译:

void Main()
{
    int[] row = new int[indices.Count]{};
    row[2] = 10;
    row.Dump();
}

// Define other methods and classes here
public class indices {
    public static int Count = 5;
}

但是,从声明 ( {}) 中删除对象初始化使其工作。

于 2010-05-16T21:43:44.197 回答
1

在 C# 中,如果要声明一个空数组,语法应该是:

int[] row = new int[indices.Count];

于 2010-05-16T21:49:58.783 回答
0

因为当您使用数组初始化语法并指定数组的大小时

int[] arr = new int[5]{1,2,3,4,5};

数组的大小是多余的信息。编译器可以从初始化列表中推断出大小。正如其他人所说,您要么创建空数组:

int[] arr = new int[5];

或使用初始化列表:

int[] arr = {1,2,3,4,5};
于 2010-05-16T22:03:10.163 回答