代码之家  ›  专栏  ›  技术社区  ›  LLS

使用带二维数组的Linq,选择“未找到”

  •  22
  • LLS  · 技术社区  · 16 年前

    我想使用LINQ查询二维数组,但得到一个错误:

    找不到源类型“simplegame.ilandscape”的查询模式的实现[ , '' 找不到“select”。是否缺少对“system.core.dll”的引用或“system.linq”的using指令?

    代码如下:

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

    我查过了,我包括了推荐信 System.Core 并使用 System.Linq .

    有人能给出一些可能的原因吗?

    2 回复  |  直到 10 年前
        1
  •  28
  •   Anthony Pegram    16 年前

    为了将多维数组与Linq一起使用,只需将其转换为 IEnumerable<T> . 很简单,这里有两个用于查询的示例选项

    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<int>()
                    where item % 2 == 0
                    select item;
    

    每个语法都将把二维数组转换为 IEnumerable<t> (因为你说 int item 在一个From子句中或 array.Cast<int>() 在另一个)。然后,您可以使用LINQ方法过滤、选择或执行您希望的任何投影。

        2
  •  15
  •   Community Mohan Dere    9 年前

    您的映射是一个多维数组——这些数组不支持LINQ查询操作(请参阅更多信息 Why do C# Multidimensional arrays not implement IEnumerable<T>? )

    您需要为您的数组平展存储空间(可能是出于许多原因的最佳方式),或者为它编写一些自定义枚举代码:

    public IEnumerable<T> Flatten<T>(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];
        }
      }
    }