C# 3.0 引入 var 讓編譯器推斷區域變數型別。社群對其使用時機眾說紛紜,主要分為「推薦派」與「保守派」。
var customerList = ... 而非 List<Customer> list)。var 必須在宣告時賦值,減少未初始化錯誤。Dictionary<string, List<int>>)。var customerList = ...),反而增加視覺雜訊。var x = null; 編譯錯誤,需顯式型別。| 情境 | 建議 | 理由 |
|---|---|---|
| 匿名型別 | 必須用 var | 無法寫出型別名稱 |
| LINQ 查詢結果 | 建議用 var | 型別複雜(IEnumerable<匿名> 等) |
| 明顯型別(new List<T>()、基本型別) | 寫明確型別 | 程式碼即文件,閱讀零負擔 |
| 公開 API 回傳值 | 避免 var | 呼叫端需知確切型別 |
| 團隊規範 | 遵循專案 .editorconfig / StyleCop 設定 | 一致性大於個人偏好 |
// ✅ 好:型別明顯、右邊已表達意圖
var services = ServiceController.GetServices();
var running = services.Where(s => s.Status == ServiceControllerStatus.Running);
// ✅ 好:匿名型別必須用 var
var result = from p in Process.GetProcesses()
select new { p.ProcessName, p.Id, p.WorkingSet64 };
// ❌ 避免:基本型別、new 具象型別
int count = 10;
var list = new List(); // 建議 List list = new();
string name = "John";
var 是工具,非教條。核心原則:**讓維護程式碼的人(包含未來的自己)以最低認知負荷理解型別意圖**。