C#LINQ无法枚举矩阵

时间:2010-08-31 08:31:15

标签: c# asp.net linq

我宣布了3 X 3矩阵

int[,] matrix=new int[3,3]
                {
                   {1,2,3},
                   {4,5,6},
                   {11,34,56}
                };

当我尝试枚举它时

var diagonal = matrix.AsQueryable().Select();

我无法将其转换为可枚举的集合。如何做到这一点?

2 个答案:

答案 0 :(得分:8)

矩形数组未实现通用IEnumerable<T>类型,因此您需要调用Cast<>。例如:

using System;
using System.Collections.Generic;
using System.Linq;

class Test
{
    static void Main()
    {
        int[,] matrix=new int[3,3]
                {
                   {1,2,3},
                   {4,5,6},
                   {11,34,56}
                };

        IEnumerable<int> values = matrix.Cast<int>()
                                        .Select(x => x * x);
        foreach (int x in values)
        {
            Console.WriteLine(x);
        }
    }
}

输出:

1
4
9
16
25
36
121
1156
3136

答案 1 :(得分:1)

应用于数组时,

AsQueryable()没有意义。 Select没有参数没有重载。

matrix(多维数组)本身就是IEnumerable。如果您想查询它,则需要使用IEnumerable<int>将其强制转换为matrix.Cast<int>(),它将生成1,2,3,4,5,6,11的序列...

如果你想以Linqish方式获得对角线,你应该这样做:

var diagonal = Enumerable.Range(0, matrix.GetLength(0)).Select(i => matrix[i, i]);