首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

LINQ 學習筆記(一)綜述(三):.NET 3.x 語法糖大幅簡化集合操作

     編輯:關於C語言

.NET 3.x 時代的語言革新

.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" }
};

傳統委派/匿名方法 vs Lambda 運算式

排序

// 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);

輸出集合:擴充方法 + Lambda


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));
}

LINQ 查詢語法:真正的語言整合查詢


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 各子句與進階用法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved