Q1. int [][] num = new int[4][4] // 为什么这个不允许
Q2. 
int[,] num = {
          {0,2,1,0,5},
          {0,0,0,3,0},
          {0,0,0,0,1},
          {0,3,1,0,0}
};var query = (from int n  from num[0]    // num[0] 又是不允许, 相反地用若是num[][] 就可以...??????
            where n > 0
            select n).count;Q3. 这种num[,] 定义, LINQ 如何重直查找 及 横向查找 ?

解决方案 »

  1.   

    A1.int[][]不是二维数组,而是数组的数组(或称锯齿形数组),只能这样定义:
    int[][] num = new int[4][];A2.int[,]这个是二维数组,索引时,必须要用两个维的索引来取值,而且取的值是一个int型
    而int[][]是数组的数组,num[0]是一个int数组A3.这种情况好像不用linq更好吧
      

  2.   

    C#里面一般的二维数组 可以这样定义:int[,] a = new int[3,4] ;//这就是一个固定了行列数的情况。类似你的Q2中的定义
    但是C#提供了一种更为灵活的锯齿数组,就是你的Q1问题中的形式,但是你定义错了,因为锯齿数组每一维的长度可以不一定,需要另外定义,如下面所示://锯齿数组
    int[][] a = new int[3][];
    //然后这样对每个数组赋值
    a[0] = new int[10] ;
    a[1] = new int[7] ;
    a[2] = new int[15] ;看到了区别么?就是锯齿数组更为的灵活,二维的长度可以不固定,就满足了很多特定的应用要求。具体的你可以查看MSDN...上面讲的很详细
      

  3.   

    C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:
    一维数组:
    int[二] numbers;
    维数组:
    string[,] names;
    数组的数组(交错的):
    byte[][] scores;
      

  4.   

    C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组: 
    一维数组: 
    int[] numbers; 
    二维数组: 
    string[,] names; 
    数组的数组(交错的): 
    byte[][] scores;
    不好意思,鼠标点错了
      

  5.   

    1维 int[] numbers = new int[5];
    2维 string[,] names = new string[5,4];
    3维 int[,,] buttons = new int[4,5,3];
    下面是交错数据
    byte[][] scores = new byte[5][];
    for (int x = 0; x < scores.Length; x++) {   scores[x] = new byte[4];}