微軟技術棧的演進速度向來驚人,許多開發者常感嘆:剛掌握的技術轉眼便成了「過眼雲煙」。作為一名從 2002 年起便投身 .NET 開發的「老兵」,我深刻體會到:若不持續站在技術前沿,飯碗恐難保住。回顧過往五六年的開發生涯,雖長期使用 VS.NET 與 C#,卻對 .NET 框架底層機制僅知皮毛——只會拖拉控件美化頁面,將 UI 數據傳給業務層再調用數據層,對 ASP.NET 管線、架構設計、自動化測試、性能調優、事務管理、部署安裝、代碼重構、設計模式等核心能力卻鮮有涉獵。
近兩年因裝修、婚嫁等事務中斷技術積累,原有技術棧已嚴重脫節,導致薪資停滯且面臨失業風險(房貸壓力山大)。在多重焦慮驅動下,我決定徹底「重啟人生」,從基礎重學起步,系統梳理 C# 3.0 核心特性,期望這份筆記能為同行提供參考。
var)var) 深度剖析var 關鍵字乍看與 JavaScript 相似,實則差異巨大。它並非「弱類型」或「動態類型」,而是編譯器在編譯期根據初始化表達式進行靜態類型推斷的語法糖。
var i = 5; // 推斷為 int
var h = 23.56; // 推斷為 double
var s = "C Sharp"; // 推斷為 string
var intArr = new[] {1, 2, 3, 4}; // 推斷為 int[]
var a = new[] { 1, 10, 100, 1000 };
foreach/for/using 等語句塊中聲明,不可用於類字段或屬性。var i = 0;),編譯器需根據初始化表達式推斷類型;null 無類型信息,會導致編譯錯誤。var i = 0; i = "test"; 會編譯報錯(無法隱式轉換 string 到 int)。var 純屬語言層面語法糖,IL 中會被替換為實際類型,無運行時開銷。var person = new { Name = "maotin", Age = 99 };
Console.WriteLine(person.Name); // 輸出: maotin
Console.WriteLine(person.Age); // 輸出: 99
匿名類型無法顯式聲明類型名稱,var 成為唯一可行的聲明方式。
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var queryLowNums = from num in numbers
where num < 5
select num;
foreach (var n in queryLowNums)
Console.Write(n + " "); // 輸出: 4 1 3 2 0
查詢表達式返回 IEnumerable<T>,具體泛型參數類型往往冗長難寫,var 大幅簡化代碼。
foreach (var item in collection) { /* ... */ }
避免重複書寫複雜泛型類型,提升可讀性。
Dictionary<string, List<int>>)。var i = 9; 降低可讀性)、公開 API 返回類型、類型語義不明確時。核心原則:var 應讓代碼「更清晰」而非「更懶惰」。當類型從右側初始化表達式顯而易見時使用;否則顯式聲明類型更利於維護。