Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#LINQ无法枚举矩阵_C#_Asp.net_Linq - Fatal编程技术网

C#LINQ无法枚举矩阵

C#LINQ无法枚举矩阵,c#,asp.net,linq,C#,Asp.net,Linq,我声明了一个3x3矩阵 int[,] matrix=new int[3,3] { {1,2,3}, {4,5,6}, {11,34,56} }; 当我试图列举它的时候 var diagonal = matrix.AsQueryable().Select(); 我无法将其转换为可枚举集合。如何做?矩形数组不实现泛型IE

我声明了一个3x3矩阵

int[,] matrix=new int[3,3]
                {
                   {1,2,3},
                   {4,5,6},
                   {11,34,56}
                };
当我试图列举它的时候

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

我无法将其转换为可枚举集合。如何做?

矩形数组不实现泛型
IEnumerable
类型,因此需要调用
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);
        }
    }
}
AsQueryable()
应用于数组时没有意义<代码>选择没有无参数的重载

矩阵
(多维数组)本身就是
IEnumerable
。如果要查询它,需要使用
matrix.cast()
将其转换为
IEnumerable
,它将生成1、2、3、4、5、6、11的序列

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

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