C# 3.0(Visual Studio 2008 / .NET Framework 3.5)引入 var 關鍵字,允許編譯器根據初始化運算式推斷區域變數的型別。這不僅減少重複程式碼,更配合匿名型別、LINQ 查詢成為現代 C# 開發的基石。
var i = 5; // int
var s = "Hello"; // string
var d = 1.0; // double
var arr = new int[] { 1, 2, 3 }; // int[]
var dict = new Dictionary(); // Dictionary
等同於:
int i = 5;
string s = "Hello";
double d = 1.0;
int[] arr = new int[] { 1, 2, 3 };
Dictionary dict = new Dictionary();
var x; ❌ 編譯錯誤。var y = null; ❌ 編譯器無法推斷型別。var z = {1, 2, 3}; ❌ 需寫 new int[] {1,2,3} 或 new List{1,2,3} 。var a = 1, b = "str"; ❌。LINQ 查詢投射結果常為匿名型別,唯有 var 能接收:
var query = from c in customers
where c.City == "Taipei"
select new { c.Name, c.Phone }; // 匿名型別
foreach (var item in query) { ... }
var dict = new Dictionary>>();
// vs
Dictionary>> dict = new ...();
foreach (var item in collection) { ... }
using (var fs = new FileStream(...)) { ... }
for (var i = 0; i < 10; i++) { ... }
lock (var obj = new object()) { ... } // C# 8.0+ 簡化 lock
| 觀點 | 建議 |
|---|---|
| 型別明顯時 | 使用 var 減少雜訊(如 var list = new List<string>())。 |
| 型別不明顯時 | 顯式宣告型別以提高可讀性(如 var result = Compute(); → int result = Compute();)。 |
| 基礎型別 | 團隊慣例為主;微軟官方風格建議對 int、string 等內建型別使用關鍵字而非 var。 |
var 是 C# 邁向型別推論的關鍵一步,配合後續版本的 dynamic、record、target-typed new 等特性,讓程式碼更簡潔且保有強型別安全。善用 var 能提升開發效率,但團隊應訂定風格指南避免濫用導致可讀性下降。