ArrayList list = new ArrayList();
list.Add(new Employee("Zxjay", 20, "010-123456"));
list.Add(new Employee("Andy", 30, "020-123456"));
// 排序需實現 IComparer
list.Sort(new EmployeeNameComparer());
// 篩選:遍歷 + 強轉 + 裝箱
ArrayList beijing = new ArrayList();
foreach (object obj in list)
{
Employee e = obj as Employee;
if (e != null && e.Phone.StartsWith("010") && e.Age < 50)
beijing.Add(e);
}
List<Employee> list = new List<Employee> {
new Employee("Zxjay", 20, "010-123456"),
new Employee("Andy", 30, "020-123456")
};
// 匿名方法排序/篩選
list.Sort(delegate(Employee x, Employee y) { return x.Name.CompareTo(y.Name); });
var beijing = list.FindAll(delegate(Employee e) {
return e.Phone.StartsWith("010") && e.Age < 50;
});
// 實體類簡化
public class Employee { public string Name {get;set;} public int Age {get;set;} public string Phone {get;set;} }
// 集合初始化器
var list = new List<Employee> {
new Employee { Name="Zxjay", Age=20, Phone="010-123456" },
new Employee { Name="Andy", Age=30, Phone="020-123456" },
new Employee { Name="Bill", Age=50, Phone="010-345678" },
new Employee { Name="Lee", Age=40, Phone="010-234567" }
};
// LINQ 查詢語法 - 類 SQL 但 select 在最後
var result = from e in list
where e.Phone.StartsWith("010") && e.Age < 50
orderby e.Name
select e;
// 等價 Lambda 鏈
var result = list
.Where(e => e.Phone.StartsWith("010") && e.Age < 50)
.OrderBy(e => e.Name);
| 維度 | .NET 1.x | .NET 2.0 | .NET 3.5+ |
|---|---|---|---|
| 集合類型 | ArrayList (object) | List<T> (泛型) | List<T> + 初始化器 |
| 類型安全 | 運行時 | 編譯時 | 編譯時 + 推斷 |
| 裝箱/拆箱 | 大量 | 無 | 無 |
| 排序/篩選語法 | IComparer 類 | 匿名委托 | Lambda / 查詢語法 |
| 代碼行數 | 最多 | 中等 | 最少 |
| 可讀性 | 低 | 中 | 高 (聲明式) |
LINQ 不只是語法糖,它改變了 C# 處理數據的思維方式。從這裡開始,擁抱聲明式編程。