【发布时间】:2020-02-01 18:58:28
【问题描述】:
我正在尝试使用 Linq 和基于我找到的代码示例的 Select 方法深度复制二维数组:
var copy = original.Select(x => x.ToArray()).ToArray(); 其中“原始”是int[,] original = new int[10, 10] 并填充了值。
但是,当我尝试使用这种格式时,我收到 Select() 的定义错误,就好像它一开始就不存在一样。请注意,我确实列出了 using System.Linq;。输入时,Linq 方法甚至不会显示在 Intellisense 弹出窗口中。
我假设我的 2D 数组本身不是问题,因为我已经填充它并打印了所有值而没有问题,所以它没有损坏。但是为什么 Linq 方法被包含在代码库列表中却不起作用?
【问题讨论】:
-
original二维数组是int,我正在复制到var copy。那不应该只是将副本设置为原始的正确数据类型吗?我也手动将副本更改为 int 并且它不影响original.Select()不被识别。 -
等等,你不能用普通数组使用 Linq 吗?我在问题中列出的示例 Linq 专门用于使用 2D 数组而不是列表的示例中,甚至没有包含集合。
-
它显示的信息与发布有关
Cast<int>()的其他用户相似,但是,这会导致ToArray()调用出现另一个问题。这适用于 2D 数组还是仅适用于 1D? -
您不能调用
ToArray,因为没有要转换为数组的子序列。 jagged arrays,而不是二维数组,可以实现您的想法。如果您从 here 那里得到建议,那么不幸的是,他们正在谈论锯齿状数组,错误地将它们称为 2D 数组。 -
这就是
int[][]和int[,]的区别吗?如果是这样,那么这是有道理的,因为我所遵循的示例是前者。
标签: c# visual-studio linq