gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:08 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com