.NET 3.5(C# 3.0)引入一系列語法糖,徹底改變集合操作體驗:自動屬性、擴充方法、隱含型別、匿名型別、集合初始化器、Lambda 運算式。
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" }
};
// Lambda 寫法
list.Sort((Employee x, Employee y) => x.Name.CompareTo(y.Name));
// Lambda 寫法
var listBeijing = list.FindAll(emp => emp.Phone.StartsWith("010") && emp.Age < 50);
private void ShowList(List<Employee> list)
{
Console.WriteLine("{0,-20}{1,-5}{2}", "Name", "Age", "Phone");
list.ForEach(emp => Console.WriteLine("{0,-20}{1,-5}{2}", emp.Name, emp.Age, emp.Phone));
}
var selectResult = from emp in list
where emp.Phone.StartsWith("010") && emp.Age < 50
orderby emp.Name
select emp;
語法結構酷似 SQL,但 select 子句置於最後,符合 C# 讀寫順序,支援 IntelliSense 與編譯期型別檢查。
上述 LINQ 查詢編譯後,等同於呼叫 Enumerable.Where、OrderBy、Select 等擴充方法。CLR 版本仍為 2.0,編譯器在背後完成所有轉換工作。
.NET 3.x 的語法革新,讓集合操作從「指令式迴圈」進化為「宣告式查詢」,大幅降低認知負擔。後續文章將逐步深入 LINQ 各子句與進階用法。