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