2010-08-31 37 views
4

我宣佈一個3×3矩陣C#LINQ無法枚舉矩陣

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

當我試圖枚舉它像

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

我unbale將其轉換爲可枚舉collection.How做那?

回答

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 
+0

非常感謝Jon – amit 2010-08-31 08:44:37

1

AsQueryable()是無意義的。 Select沒有參數沒有過載。

matrix(多維數組)是IEnumerable本身。如果你想查詢它,你需要使用matrix.Cast<int>()將它轉換爲IEnumerable<int>,它將產生1,2,3,4,5,6,11 ......

的一個序列

如果你想在Linqish中獲得對角線你應該這樣做:

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