过去我使用完整的初始化语法初始化了数组:
int[] arr = new int[1] { 1 };
但是一旦我发现我在初始化期间不需要指定类型,我就停止这样做了:
int[] arr = { 1 };
我最近再次查看了锯齿状数组,并发现了这种语法的一个非常奇怪的问题:
int[][] jag = { { 1, 2 }, { 3 } };
以上代码无效,令我困惑。此外,这种语法很好:
int[][] jag = { new []{ 1, 2 }, new []{ 3 } };
显然,这里唯一的区别是“new”关键字。通常,在其他语言中,“new”关键字表示变量将成为引用类型,但在C#数组中始终是引用类型,因此实际上不需要为数组指定“new”。有谁知道为什么我需要在这个锯齿状数组初始化中指定它?这是一个错误,还是只是一个未实现的编译器功能?
答案 0 :(得分:8)
这是一个错误吗?
不。
有谁知道为什么我需要在这个锯齿状数组初始化中指定它?
没有基本的理论上的理由说明为什么C#语言必须只允许矩阵多维数组的数组初始化语法,而不是锯齿状的多维数组。
您想要的功能不存在,因为没有人设计,指定,实施,测试,记录和发送该功能。这是因为与几乎任何其他可能花费时间的功能相比,该功能可以合理地表征为非常非常不重要。功能昂贵;设计团队试图花时间处理解决实际用户问题的功能。
像您建议实施的那些小“糖”功能;例如,表达体方法。但几乎每个程序都包含小方法。绝大多数程序甚至不包含一个锯齿状的初始化一次数组,因此这个功能可以节省几乎没有六个键击。不值得。
可能只是一个未实现的编译器功能,将在未来的C#版本中修复?
如果此功能对您很重要,那么设计和实施过程就是开放的。随意提出,设计,指定,实施,测试和记录该功能,看看他们是否接受您的拉取请求。