下面贴一段遍历数组得代码.是编译失败得,请分析,
            int[,] myStrAr = new int[,] { { 1, 2, 3, 4, 5, 6 }, { 34, 45, 56, 67, 78, 54 } };
            for (int i = 0; i < myStrAr.GetLength(0); i++)  //
            {
                for (int j = 0; j < myStrAr[i].Length; j++)
                {
                    Console.WriteLine("{0}",myStrAr[i,j]);
                }
            }
            Console.ReadKey()但是在交错数组中这样遍历却又可以,            int[][] myString = { new int[] { 12, 34, 45, 56 }, new int[] { 423, 45 } };
            for (int i = 0; i < myString.Length; i++)               {
                for (int j = 0; j < myString[i].GetLength(0); j++)// 不可以换成getlength(1)
                {
                    Console.WriteLine("{0,-3}",myString[i][j]);
                }
            }请问,为什么在交错数组中可以这样遍历,而在多维数组中却不可以呢
  

解决方案 »

  1.   

    int[,] myStrAr
    int[][] myString 声明的数据结构不一样 int[][] myString是数组的数组,而int[,] myStrAr是二维数组
    你打个断点看看他们赋值后的结构就明白了
      

  2.   


    int[,] myStrAr = new int[,] { { 1, 2, 3, 4, 5, 6 }, { 34, 45, 56, 67, 78, 54 } };
                for (int i = 0; i < myStrAr.GetLength(0); i++)  //
                {
                    for (int j = 0; j < myStrAr.GetLength(1); j++)
                    {
                        Console.WriteLine("{0}", myStrAr[i, j]);
                    }
                }
      

  3.   

                int[][] myString = { new int[] { 12, 34, 45, 56 }, new int[] { 423, 45 } };
                for (int i = 0; i < myString.Length; i++)               {
                    for (int j = 0; j < myString[i].GetLength(0); j++)// 不可以换成getlength(1)
                    {
                        Console.WriteLine("{0,-3}",myString[i][j]);
                    }
                }
    myString[0] 实际上是  new int[] { 12, 34, 45, 56 }
    myString[1] 是new int[] { 423, 45 }myString[0].GetLength(1) //当然出错误了
      

  4.   

        int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };
                          foreach(int i in a)
                          {
                              Console .WriteLine (i);
                          }
                int [,] arr1={{1,2}, {3,4}, {5,6}, {7,8}};
                for(int i=0;i<arr1.GetUpperBound(0)-arr1.GetLowerBound(0)+1;i++)
                {
                    for(int j=0;j<arr1.GetUpperBound(1)-arr1.GetLowerBound(1)+1;j++)
                    {
                        Console.WriteLine(arr1[i,j]);
                    }
                }
                Console.Read();
      

  5.   

    我也学习了!:            int[,] myStrAr = new int[,] { { 1, 2, 3, 4, 5, 6 }, { 34, 45, 56, 67, 78, 54 } };            //方法1-----------------------------------------
                for (int i = 0; i <= myStrAr.GetUpperBound(0); i++)
                {
                    for (int j = 0; j <= myStrAr.GetUpperBound(1); j++)
                    {
                        Console.WriteLine(myStrAr[i, j]);
                    }
                    Console.WriteLine();
                }
                Console.WriteLine("".PadRight(36, '-'));
                //方法2-----------------------------------------
                for (int i = 0; i < myStrAr.GetLength(0); i++)
                {
                    for (int j = 0; j < myStrAr.GetLength(1); j++)
                    {
                        Console.WriteLine(myStrAr[i, j]);
                    }
                    Console.WriteLine();
                }
                Console.WriteLine("".PadRight(36, '-'));
                //方法3-----------------------------------------
                foreach (int item in myStrAr)
                {
                    Console.Write("{0}  ", item);
                }
                Console.WriteLine("\n".PadRight(36, '='));
                //=========================================
                //交错数组,即由数组组成的数组。交错数组是一维数组,且每个元素自身是一个数组。作为元素的数
                //组无需均为相同的大小。
                int[][] myString = { new int[] { 12, 34, 45, 56 }, new int[] { 423, 45 } };
                foreach (int[] Item in myString)
                {
                    foreach (int item in Item )
                    {
                        Console.Write("{0}  ", item);
                    }
                    Console.WriteLine();
                }
      

  6.   

    int[,] myStrAr = new int[,] { { 1, 2, 3, 4, 5, 6 }, { 34, 45, 56, 67, 78, 54 } };
                    for (int i = 0; i < myStrAr.GetLength(0); i++)  //
                    {
                        for (int j = 0; j < myStrAr.GetLength(1); j++)
                        {
                            Console.WriteLine("{0}",myStrAr[i,j]);
                        }
                    }
                    Console.ReadKey();
      

  7.   

    除非必要,尽量使用foreach因为foreach无需关心数组下标的问题