【发布时间】:2013-01-07 16:10:31
【问题描述】:
发件人:http://msdn.microsoft.com/en-us/library/2s05feca.aspx
请注意,您不能在元素初始化中省略 new 运算符,因为元素没有默认初始化:
int[][] jaggedArray3 =
{
new int[] {1,3,5,7,9},
new int[] {0,2,4,6},
new int[] {11,22}
};
什么意思?
为什么可以省略 new in:
int[] arrSimp = { 1, 2, 3 };
int[,] arrMult = { { 1, 1 }, { 2, 2 }, { 3, 3 } };
但不可能在:
int[][,] arrJagg = {new int[,] { { 1, 1} }, new int[,] { { 2, 2 } }, new int[,] { { 3, 3 } } };
【问题讨论】:
-
可能有技术原因,例如语法歧义,或某些极端情况导致词法分析过于复杂。在这种情况下,C# 设计者倾向于在简单性(或现状)方面犯错,尤其是当使用概率很低并且存在相当等价的语法不会破坏程序员的使用时。
-
也许只是允许它允许一些噩梦般的解析案例......
-
@ChrisSinclair 没关系,但我不明白他们给出的解释(没有默认初始化)。 int foo[] 是否默认初始化不使用new?
标签: c# new-operator jagged-arrays