在MonoDevelop中,我有以下代码编译:
int[] row = new int[indices.Count]{};
然而,在运行时,我得到:
Matrix.cs(53,53):错误CS0150:A 预期值(CS0150) (testMatrix)
我知道这个错误意味着什么并强迫我调整数组的大小:
int[] row = new int[indices.Count]{};
Array.Resize(ref row, rowWidth);
这是我必须处理的事情,因为我在Linux上使用MonoDevelop吗?我确信在.Net 3.5下我能够使用包含数组宽度的变量初始化数组。任何人都可以确认这是孤立的吗?如果是这样,我可以向bugzilla报告错误。
答案 0 :(得分: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;
数组仍然首先被初始化为默认值,这个语法只是提供了一个简写,以避免havind自己编写这些额外的赋值。
答案 1 :(得分: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;
}
但是,从声明({}
)中删除对象初始化会使其正常工作。
答案 2 :(得分:1)
在C#中,如果要声明一个空数组,则语法应为:
int [] row = new int [indices.Count];
答案 3 :(得分:0)
因为当你使用数组初始化语法并指定数组的大小时
int[] arr = new int[5]{1,2,3,4,5};
数组的大小是多余的信息。编译器可以从初始化列表中推断出大小。正如其他人所说,你要么创建空数组:
int[] arr = new int[5];
或使用初始化列表:
int[] arr = {1,2,3,4,5};