Linq中查詢二維陣列
阿新 • • 發佈:2019-02-06
以下程式碼為在一個4*4的二維int陣列中將大於5的元素查出:
Enumerable.Cast<TResult>() 泛型方法將 IEnumerable 的元素轉換為指定的型別。
(或 Visual Basic 中的 For Each)來列舉該物件時,才執行此方法表示的查詢。
- staticvoid Main(string[] args)
- {
- int[,] array = newint[4, 4];
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- array[i, j] = (i + 1) * (j + 1);
- var intQuery = from i in array.Cast<int>()
- where i > 5
- select i;
- foreach (int i in intQuery)
- Console.WriteLine(i);
- }
Enumerable.Cast<TResult>() 泛型方法將 IEnumerable 的元素轉換為指定的型別。
此方法通過使用延遲執行實現。即時返回值為一個物件,該物件儲存執行操作所需的所有資訊。只有通過直接呼叫物件的 GetEnumerator 方法或使用 Visual C# 中的 foreach
Cast<TResult>()(IEnumerable) 方法通過提供必要的型別資訊,可在非泛型集合上呼叫標準查詢運算子。例如,ArrayList 並不實現 IEnumerable<T>(),但通過呼叫 ArrayList 物件上的 Cast<TResult>()(IEnumerable),就可以使用標準查詢運算子查詢該序列。
如果元素無法強制轉換為 TResult 型別,則此方法將引發異常。若要只獲取可以強制轉換為
TResult 型別的元素,請使用 OfType< TResult>()
方法,而不是 Cast<TResult>()(IEnumerable)。
在查詢表示式中,顯式型別迭代變數會轉換為 Cast<TResult>()(IEnumerable) 的一個呼叫。