使用Linq和2D数组,选择未找到

我想使用Linq查询2D数组,但是我收到一个错误:

找不到源类型’SimpleGame.ILandscape [ ]’的查询模式的实现。 找不到“选择”。 您是否缺少对’System.Core.dll’的引用或’System.Linq’的using指令?

代码如下:

var doors = from landscape in this.map select landscape; 

我已经检查过我是否包含了参考System.Core并使用了System.Linq

谁能给出一些可能的原因?

要使用LINQ的多维数组,只需将其转换为IEnumerable 。 这很简单,这里有两个查询示例选项

 int[,] array = { { 1, 2 }, { 3, 4 } }; var query = from int item in array where item % 2 == 0 select item; var query2 = from item in array.Cast() where item % 2 == 0 select item; 

每种语法都会将2D数组转换为IEnumerable (因为你在一个from子句中表示int item ,或者在另一个中表示array.Cast() )。 然后,您可以使用LINQ方法过滤,选择或执行您希望的任何投影。

您的地图是一个多维数组 – 这些数组不支持LINQ查询操作(请参阅更多内容为什么C#多维数组不实现IEnumerable ? )

您需要为数组压缩存储(可能是出于多种原因的最佳方式)或为其编写一些自定义枚举代码:

 public IEnumerable Flatten(T[,] map) { for (int row = 0; row < map.GetLength(0); row++) { for (int col = 0; col < map.GetLength(1); col++) { yield return map[row,col]; } } }