C# 3.0 的四大核心語言增強——隱式型別區域變數(var)、物件/集合初始化器、匿名類型、擴充方法——不僅大幅提升編寫效率,更為 LINQ 查詢表達式、Lambda 表達式與運算式樹奠定了不可或缺的語法基礎。本文系統整合這四大特性的語法規則、編譯行為、相互關聯與最佳實踐。
var i = 5; // int
var s = "Hello"; // string
var arr = new[] { 1, 2, 3 }; // int[]
var anon = new { X = 1, Y = 2 }; // 匿名類型
核心規則: 僅限區域變數、必須初始化、不可為 null、推斷結果為強型別且不可變。隱式型別陣列 new[] 要求所有元素可隱式轉換至單一型別。
var book = new Book { Title = "C# in Depth", Price = 45.9m, Author = new Author { Name = "Jon Skeet" } };
new Book("ISBN") { Price = 10 }
var list = new List<int> { 1, 2, 3 };
var dict = new Dictionary<string, int> { { "A", 1 }, { "B", 2 } }; // 注意雙大括號
ICollection<T>Add 呼叫
var p1 = new { Name = "A", Price = 3 };
var p2 = new { Name = "B", Price = 4 }; // 同型別
var p3 = new { Price = 3, Name = "A" }; // 不同型別(順序不同)
關鍵特性:
Equals/GetHashCode/ToString
public static class StringExtensions
{
public static bool IsValidEmail(this string s)
{
return Regex.IsMatch(s, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
}
}
// 使用
"test@example.com".IsValidEmail(); // true
定義規則:
this 修飾,型別即為擴充目標解析優先順序:
using 順序)
| 特性 | 為 LINQ 提供的基礎 |
|---|---|
var | 查詢結果型別往往為匿名類型或複雜泛型,必須隱式型別 |
| 物件/集合初始化器 | select new { ... } 投影語法基礎 |
| 匿名類型 | 查詢投影結果型別、分組鍵型別 |
| 擴充方法 | 標準查詢運算子(Where, Select, OrderBy...)實作機制 |
record/Tuple/具名類別