none
建议:交错数组声明方便写法的建议 RRS feed

  • 问题

  • 希望微软在新版本或者小更新里面增加C#语言方便的操作,连List<>都能当数组写,为什么交错数组不提供方便的操作呢

    在C#语言规范里面,多维度交错数组声明,最后一个维不能声明长度,例如

    1.          int[][] array = new int[3][]; // yes

    2.          int[][] array = new int[3][2]; // error 希望这个也能是正确的

    3.          int[][] array = new int[3][] { { 1, 2, 3, }, { 1, 2, 3, }, }; //error

    4.          int[] array = new int[9]; // yes

    5.          int[] one = new int[3] { 1, 2, 3, };  //yes

    6.          int[] two = { 1, 2, 3, 4 }; //yes 一维允许省略new int[3],而交错数组不提供这个方便?

    7.          int[][] array = new int[3][] { new int[]{ 1, 2, 3, }, new int[]{ 1, 2, 3, }, }; //yes

    8.          int[][] array = { one,  two, }; //yes 把数组放入交错数组里面,数组的数组,合法的

    9.          int[][] array = { { 1, 2, 3, }, { 1, 2, 3, 4 } }; //error 错误,但这个完全编译器自动提供new int[] {x,x,x,}的操作啊

    10.        int[][] array = {new int[]{1, 2, 3},new[]{1, 2, 3, 4}}; //yes 这个写法虽然是对的,但不方便,总是要写new int[]的

    11.        int[,] array = {{1, 2, 3},{1, 2, 3, 4}}; //error 多维数组长度不一致,这个语法可以检测得到的

    12.        int[][] array = new int[3][]; //yes 这里能分别赋值不同长度的一维数组到最后一维度中

    13.        int[][] array = new int[3][3]; //error,这种希望写法可以默认最后一维都是长度3的一维数组,方便提供默认值

    交错数组实用性比较强,而且有些时候使用比较多,方便的操作并不会导致语法会有歧义啊。

    语法检测器完全可以检测,如果赋值对象是交错数组,编译的时候自动补充new X的操作,根据不同类型自动补充,这样可以省略累赘的写法

    同时也是符合了C#简洁又有理的风格,连List<>之类都可以写成 List<int> list = new List<int>(){ 1, 2, 3 }; 都省略了Add的操作,为什么交错数组不提供这个便利呢

    比如List<int[]> list = new List<int[]>(); 从语法上明显默认赋值类型都是int[]的,也可以在声明的时候省略这个new int[]

    int[][] array = { { 1, 2, 3, }, { 1, 2, 3, 4 } }; //交错二维,这样声明数组,很美观,而且便于理解

    int[,] array = { { 1, 2, 3, }, { 1, 2, 3, } }; //二维数组,这样声明数组,也很美观,也便于理解,因为多维数组维度必须一样



    • 已编辑 枫叶儿 2014年3月6日 5:44 增加了
    2014年3月6日 4:12

答案

  • 你好:

    首先我想请你参考一下MSDN上对数组的说明:

    多维数组(C# 编程指南)

    交错数组(C# 编程指南)

    List<T>

    多维数组和交错数组各有各的优点,如果你追求语法上的方便的话你可以使用多维数组,定义方法基本上可以满足你上面提到的形式,如果你追求性能的话就使用交错数组,速度会比普通的多维数组要快,但是这要取决于你在数组中存放的数据量的大小,如果不是太大其实性能差距很微小。而List<T>的内部其实就是数组在存储数据,它是对数组的一个封装,但是它有一个优势就是.net提供了很多比较方便的方法,比如添加元素,查找位置等,这些功能普通的数组是需要自己实现的。在不同的场合你可以取舍一下到底使用哪一种,我建议你使用.net提供的List,而不是用原始的数组,技能保证语法上面的方便,也可以使用.net已经提供的方法。

    如果你觉得还是很困惑的话你可以在这个地方提出你的反馈,微软的工程师会给你回复。

    Microsoft Connect


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2014年3月7日 9:50
    版主