我宣布了3 X 3矩阵
int[,] matrix=new int[3,3]
{
{1,2,3},
{4,5,6},
{11,34,56}
};
当我尝试枚举它时
var diagonal = matrix.AsQueryable().Select();
我无法将其转换为可枚举的集合。如何做到这一点?
答案 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]);