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

C# var 關鍵字使用爭議與最佳實踐指南

     編輯:關於C#

var 基本規則

  • **僅限區域變數** (區域變數、for/foreach/using 迴圈變數)。
  • **必須初始化**,編譯器從初始化運算式推斷型別。
  • **編譯期靜態型別**,非動態型別 (非 dynamic)。
  • 不可用於欄位、屬性、方法參數、回傳型別。

爭議焦點

觀點支持 var反對 var
可讀性減少型別名稱雜訊,專注變數名稱與邏輯隱藏型別資訊,需滑鼠懸停/跳轉定義才知型別
命名風格迫使使用描述性變數名 (如 var customerList = ...)誘導匈牙利式命名 (如 var lstCustomers = ...)
重構彈性變更回傳型別無需修改呼叫端變數宣告可能掩蓋型別變更導致的語意錯誤
匿名型別**唯一可行選擇** (LINQ 投影、匿名物件)—

官方指導原則 (Microsoft C# Coding Conventions)

當型別從右側運算式顯而易見時使用 var;否則顯式宣告型別。
必須使用 var:匿名型別、LINQ 查詢結果。

建議使用 var 的情況 ✅

  1. 建構函式呼叫型別明顯:var list = new List<Customer>();
  2. 工廠方法/靜態建立:var stream = File.OpenRead(path);
  3. 泛型型別冗長:var dict = new Dictionary<string, List<int>>();
  4. LINQ 查詢/投影:var q = from c in ctx.Customers select new { c.Id, c.Name }; (匿名型別**必須**用 var)
  5. foreach 迴圈:foreach (var item in collection) — 型別從集合元素型別推斷。
  6. using/disposable:using var fs = new FileStream(...);

建議顯式宣告型別的情況 ❌

  1. 數值字面常數:int count = 0; (而非 var count = 0; → 推斷為 int 但意圖不明)
  2. 介面/基類型別重要:IEnumerable<Customer> customers = GetVipCustomers(); (強調介面而非具體實作)
  3. 隱含轉換/多型:Stream stream = new MemoryStream(); (明確為基類型別)
  4. 公開 API 邊界:欄位、屬性、參數、回傳值**不可用 var**。

實務團隊規範範例


// .editorconfig 設定
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = false:suggestion
  • 內建型別 (int, string, bool) 可用 var (提示)。
  • 型別顯而易見時用 var (提示)。
  • 其他情況**不建議**用 var。

結論

var 是工具,非教條。核心原則:**讓程式碼意圖最清晰**。
- 型別資訊對理解邏輯關鍵時 → 顯式宣告。
- 型別從右側一目瞭然、或為匿名型別 → 果斷用 var。
團隊統一風格 (透過 .editorconfig/Code Review) 比個人偏好更重要。

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