1. 程式人生 > >Linq中查詢二維陣列

Linq中查詢二維陣列

以下程式碼為在一個4*4的二維int陣列中將大於5的元素查出:
  1. staticvoid Main(string[] args)
  2.         {
  3. int[,] array = newint[4, 4];
  4. for (int i = 0; i < 4; i++)
  5. for (int j = 0; j < 4; j++)
  6.                     array[i, j] = (i + 1) * (j + 1);
  7.             var intQuery = from i in array.Cast<int>()
  8.                            where i > 5
  9.                            select i;
  10. foreach (int i in intQuery)
  11.                 Console.WriteLine(i);
  12.         }
由於二維陣列無法直接轉換為IEnumerable<T>型別,所以,通過其Cast<T>()方法先將其轉換為IEnumerable<T>再進行查詢
Enumerable.Cast<TResult>() 泛型方法將 IEnumerable 的元素轉換為指定的型別。

此方法通過使用延遲執行實現。即時返回值為一個物件,該物件儲存執行操作所需的所有資訊。只有通過直接呼叫物件的 GetEnumerator 方法或使用 Visual C# 中的 foreach

(或 Visual Basic 中的 For Each)來列舉該物件時,才執行此方法表示的查詢。

Cast<TResult>()(IEnumerable) 方法通過提供必要的型別資訊,可在非泛型集合上呼叫標準查詢運算子。例如,ArrayList 並不實現 IEnumerable<T>(),但通過呼叫 ArrayList 物件上的 Cast<TResult>()(IEnumerable),就可以使用標準查詢運算子查詢該序列。

如果元素無法強制轉換為 TResult 型別,則此方法將引發異常。若要只獲取可以強制轉換為 TResult 型別的元素,請使用 OfType<

TResult>() 方法,而不是 Cast<TResult>()(IEnumerable)

在查詢表示式中,顯式型別迭代變數會轉換為 Cast<TResult>()(IEnumerable) 的一個呼叫。