【问题标题】:C# Linq methods not being recognized by Visual Studio 2019 [duplicate]Visual Studio 2019 无法识别 C# Linq 方法 [重复]
【发布时间】: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


【解决方案1】:

将您的数组转换为IEnumerable

original.Cast<int>().Select(x => x ).ToArray();

上述查询会将您的二维数组展平为一维数组。我不知道你想要的结果是什么。我只是尝试在二维数组上使用 Linq 方法清除您的阻止程序

【讨论】:

  • 这使它成为一维数组。
  • @GSerg 完全正确。
  • 这似乎解决了 Select() 无法识别的问题,但反过来,它破坏了具有相同定义错误的 ToArray() 调用之一。如果我删除它,整行就会变成转换错误。我正在尝试将 2D 数组复制到新的 2D 数组,所以我可以使用副本而不是原始数组。
  • @Photon Select 中的 ToArray 方法的目的是什么?它将是一个IEnumerable<int>,而不是一个数组,它本身可以完成您在数组上工作所需的一切
  • 我要检查一个二维数组?我不应该多一个吗?是否只有一个ToArray() 在最后覆盖行和列?
猜你喜欢
  • 2020-03-22
  • 2020-11-27
  • 2018-03-08
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多