为什么foreach不将字符串数组识别为数组

时间:2013-04-10 10:47:04

标签: c# arrays multidimensional-array

我有这段代码:

private readonly string[,] sSOMETHING = new string[,]
{
    {"ONE", "TWO", "THREE"},
    {"FOUR", "FIVE", "SIX"}
};

...

foreach (string[] sELSE in sSOMETHING)
{
    ...
}

我在foreach中遇到一个错误,即当sSOMETHING是一个数组时,它无法将字符串转换为字符串[]。为什么它不将字符串数组识别为数组? foreach是否存在多维数组的问题?

2 个答案:

答案 0 :(得分:8)

您正在创建2D数组,而不是数组的锯齿状数组。将声明更改为以下内容:

private readonly string[][] sSOMETHING = new string[][]
{
    new []{"ONE", "TWO", "THREE"},
    new []{"FOUR", "FIVE", "SIX"}
};

答案 1 :(得分:2)

编译器正在抱怨。要使用foreach语法,您需要将其转换为数组数组(string[][]),或者通过获取其维度来使用for循环访问它:

使用以下语法访问多维数组中的所有元素,就像它被展平一样

foreach (string sELSE in sSOMETHING) {
    Console.Write(sELSE);
}

或使用类似

的内容
for (int i = 0; i < sSOMETHING.GetLength(0); ++i) {
    for (int j = 0; j < sSOMETHING.GetLength(1); ++j) {
        Console.Write(sSOMETHING[i, j]);
    }
}