程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Linq學習(7) 延遲執行 & 查詢非泛型集合(4)

Linq學習(7) 延遲執行 & 查詢非泛型集合(4)

編輯:關於C語言

查詢非泛型集合

在 .Net1.X 時代不支持泛型,構造集合時都要轉換或裝箱為Object類型,Linq 查詢是以泛型為基礎的,在老系統升級或整合時要進行非泛型集合操作。Enumerable的Cast<T>() 和OfType<T>()擴展方法使非泛型集合的 Linq 查詢成為可能。ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
var result = from i in list.Cast<int>()
       select i;
foreach (var i in result)
{
  Console.WriteLine(i);
}
// result:
// 1
// 2
// 3
// 4
// 5

如果不想顯式調用Cast<T>()方法,可以在元素前面指定類型。上面的例子變為:

ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
var result = from int i in list
       select i;
foreach (var i in result)
{
  Console.WriteLine(i);
}

我們知道,非泛型不是類型安全的,可以在非泛型的ArrayList中同時插入整型、字符串,那麼上面的方法進行類型轉換會拋出異常,影響操作的繼續進行,OfType<T>()可以一定程度上避免這個問題。如下面的示例會選擇適當的類型而忽略不匹配類型。

ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add("abc");
list.Add(3);
list.Add(4);
var result = from int i in list.OfType<int>()
       select i;
foreach (var i in result)
{
  Console.WriteLine(i);
}
// result:
// 1
// 2
// 3
// 4

如果這個例子中的集合用上面的Cast<T>()或隱式轉換將會拋出異常。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved