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

C# var 關鍵字爭論:何時該用、何時不該用?

     編輯:關於C語言

背景

C# 3.0 引入 var 讓編譯器推斷區域變數型別。社群對其使用時機眾說紛紜,主要分為「推薦派」與「保守派」。

推薦派觀點

  • 更好命名:迫使開發者用語意化變數名(如 var customerList = ... 而非 List<Customer> list)。
  • 更好 API 設計:鼓勵回傳型別豐富的物件而非基礎型別。
  • 強制初始化:var 必須在宣告時賦值,減少未初始化錯誤。
  • 減少雜訊:隱藏冗長泛型型別(Dictionary<string, List<int>>)。
  • 少寫 using:型別在推斷時已解析完畢。

保守派反駁

  • 可讀性下降:讀碼時需滑鼠懸停或腦補型別,尤其公開 API 回傳型別不明確時。
  • 匈牙利命名法回潮:為補足型別資訊,變數名變長(var customerList = ...),反而增加視覺雜訊。
  • 初始化非必要:C# 編譯器本就強制區域變數初始化才能使用。
  • 不支援 null 初始化:var x = null; 編譯錯誤,需顯式型別。
  • 官方文件建議:僅在「匿名型別」或「LINQ 查詢結果」必要時使用。

折衷與實務建議

情境建議理由
匿名型別必須用 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 是工具,非教條。核心原則:**讓維護程式碼的人(包含未來的自己)以最低認知負荷理解型別意圖**。

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