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

C# 3.0 新特性系列:隱含類型 var 完整圖解

     編輯:關於C語言

一、var 的雙面性:像 JS 又不像 JS

相同點不同點
可聲明任意類型區域變量 僅告訴編譯器「根據初始化表達式推斷類型」
只能用於區域變量(含 foreach/using/for)
非新類型,純關鍵字/佔位符

二、基本用法示例


var integer = 10;
var name = "edisundong";
var numbers = new int[] { 1, 2, 3 };
// 編譯器推斷等價於:
// int integer = 10;
// string name = "edisundong";
// int[] numbers = new int[] { 1, 2, 3 };

三、五大注意點(違反即編譯錯誤)

  1. 聲明必須初始化
    var x; x = 10; // ❌ Implicitly typed locals must be initialized
  2. 強類型不可變
    var i = 10; i = "str"; // ❌ Cannot implicitly convert 'string' to 'int'
  3. 不可用 null 初始化
    var x = null; // ❌ Cannot assign '' to implicitly typed local
  4. 初始化器限制:必須為表達式,不能包含自身,但可為對象/集合初始化器(匿名類型)
    var coll = new Hashtable(); // ✅
  5. 僅限區域變量
    class C { private var x = 1; } // ❌ 'var' may only appear within local variable declaration

四、進階適用場景

1. 匿名類型(唯一聲明方式)


var person = new { Name = "Tom", Age = 25 };

2. LINQ 查詢變量


var query = from c in customers where c.City == "London" select c;
// query 類型為 IEnumerable,var 極大簡化

3. foreach 迭代變量


foreach (var item in items) { ... }
// item 類型自動推斷,無需手寫泛型參數

4. 複雜泛型聲明


var dict = new Dictionary>>();

五、編譯原理:IL 層面零差異

使用 ildasm.exe 查看:var 在元數據中無任何痕跡,編譯器根據初始化表達式將其替換為確切類型。運行期性能與顯式聲明完全一致。

六、最佳實踐原則

類型顯而易見時用 var,類型模糊不清時顯式聲明。
  • ✅ 匿名類型、LINQ、foreach、複雜泛型
  • ✅ 右側明顯為 new Type()、字面量、已知方法調用
  • ❌ 基本類型字面量(var i = 5 不如 int i = 5 清晰)
  • ❌ 方法返回類型不明確時(var result = DoSomething() 降低可讀性)

總結

var 是 C# 向「意圖導向編程」邁出的關鍵一步:讓代碼表達『做什麼』而非『是什麼類型』。掌握五大鐵律、識別高頻場景、遵循可讀性原則,即可駕馭這個看似簡單卻威力巨大的關鍵字。

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