2013-02-07 134 views
0

我是C#的新手,正在查看数组。C#多维数组迭代

考虑:

int[][] myJagArray = new int[5][]; 

为什么下面的打印类型 j的(System.Int32 []),而不是每个J的内容是什么?

foreach (int[] j in myJagArray) 
{ 
    Console.WriteLine("j : {0}",j); 
} 

回答

5

因为Array.ToString()不返回内容的数组,它返回类型名称,Console.WriteLine隐式调用每个ToString()对象,你把它作为一个参数。

这没有考虑到一个事实,即所述阵列是多维阵列的一部分,它是简单地将CLR开发人员选择的方式(或者说,选择于)执行关于System.ArrayToString()

1

它打印来自ToString()方法的输出,因为j在本例中是一个数组,它使用Object ToString实现,并且该行为正在打印其类型。

在这里,您可能想要做什么:

foreach (int[] j in myJagArray) 
{ 
    StringBuilder sb = new StringBuilder("j : "); 

    foreach (int k in j) 
    { 
     sb.append("[").append(k).append("]"); 
    } 

    Console.WriteLine(sb.Tostring()); 
} 
1

你打印出的int阵列。

请尝试以下方法打印数组中的第一个值:

Console.WriteLine("j : {0}",j[0]); 

要打印的全部内容,你可能想尝试以下操作:

foreach (int[] j in myJagArray) 
{ 
    foreach (int i in j) 
    { 
     Console.WriteLine("i : {0}",i); 
    } 
} 
0

你应该做像下面

for(int i=0;i<5;i++) 
    for(int j=0;j<5;j++) 
     print(myjagarray[i][j].tostring()); 
0

当你使用Console.WriteLine输出一个值时,你实际上首先调用了ToString()on该值,而Array.ToString()不会返回值,而是返回类型。如果要输出j的值,则需要运行第二个循环:

foreach (int[] j in myJagArray) 
{ 
    Console.Write("j: "); 
    foreach (int i in j) 
    { 
     Console.Write("{0} ",i); 
    }  
    Console.Write("\n"); 
}