using System;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int[,] x = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
foreach (var i in x)
{
foreach (var j in i)
{
Console.WriteLine(j);
}
}
}
}
}
我注意到 var i in x
会展平数组,因此它会为第二个 foreach
生成以下错误。
Error 1 foreach statement cannot operate on variables of type 'int' because 'int' does not contain a public definition for 'GetEnumerator'
是否可以防止 foreach
展平矩形数组?
最佳答案
从某种意义上说,多维数组是一种一维数组,它使用维度信息来访问数据,就好像它们真的存储在二维中一样。因为当被许多方法访问时(例如来自类 Array
)和 foreach
迭代它被视为一维数组,因为这是内存中的实际布局。否则在迭代期间需要为每一行创建新的一维数组。
您可以尝试做以下事情来实现您想要的:
- 使用交错数组代替多维数组:
int[][]
. - 创建扩展方法
IEnumerable<IEnumerable<T>> ByRows<T>(this T[,] array)
这将创建对行进行适当迭代的迭代器。显然,行要么是一维数组,要么是将迭代行内容的另一个自定义迭代器。 - 跳过
foreach
完全并使用两个嵌套for
循环。
关于c# - 是否可以防止 foreach 展平矩形阵列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647027/