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

C# 3.0 新特性:隱式類型區域變數 var 完整指南

     編輯:關於C語言

前言

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();

限制規則

  1. 必須初始化:var x; ❌ 編譯錯誤。
  2. 初始化運算式不可為 null:var y = null; ❌ 編譯器無法推斷型別。
  3. 不可為集合初始化器本身:var z = {1, 2, 3}; ❌ 需寫 new int[] {1,2,3} 或 new List{1,2,3}。
  4. 同一宣告多個變數型別必須一致:var a = 1, b = "str"; ❌。

適用場景

1. 匿名型別(Anonymous Types)

LINQ 查詢投射結果常為匿名型別,唯有 var 能接收:

var query = from c in customers
            where c.City == "Taipei"
            select new { c.Name, c.Phone }; // 匿名型別
foreach (var item in query) { ... }

2. 泛型型別縮減

var dict = new Dictionary>>();
// vs
Dictionary>> dict = new ...();

3. foreach 迴圈變數

foreach (var item in collection) { ... }

4. using / for / lock 區塊

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 是動態型別? ❌ 編譯期靜態決定,執行期不可變。
  • var 會影響效能? ❌ 僅編譯期語法糖,IL 完全相同。
  • 欄位/屬性可用 var? ❌ 僅限區域變數、for/foreach/using 變數。

結語

var 是 C# 邁向型別推論的關鍵一步,配合後續版本的 dynamic、record、target-typed new 等特性,讓程式碼更簡潔且保有強型別安全。善用 var 能提升開發效率,但團隊應訂定風格指南避免濫用導致可讀性下降。

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