c# - 是否可以防止 foreach 展平矩形阵列?

标签 c#

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迭代它被视为一维数组,因为这是内存中的实际布局。否则在迭代期间需要为每一行创建新的一维数组。

您可以尝试做以下事情来实现您想要的:

  1. 使用交错数组代替多维数组:int[][] .
  2. 创建扩展方法 IEnumerable<IEnumerable<T>> ByRows<T>(this T[,] array)这将创建对行进行适当迭代的迭代器。显然,行要么是一维数组,要么是将迭代行内容的另一个自定义迭代器。
  3. 跳过 foreach完全并使用两个嵌套 for循环。

关于c# - 是否可以防止 foreach 展平矩形阵列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647027/

相关文章:

c# - 将大地坐标转换为 Lambert Conformal Conic

c# - 使用命名空间将 Json 转换为 XML 字符串?

c# - Java 和 C# 类属性

c# - 令人惊讶的 int.ToString 输出

c# - VS2010 与 VS2008 中的字符串排序性能下降

c# - 根据属性将两个列表合并为一个

c# 使用 Skype 接收消息?

c# - 防止 WCF 回调出现异常

c# - 从重定向进程中读取字节数组

c# - 音频,FFT不起作用