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

C# 3.0 隱式型別區域變數:var 關鍵字深度解析

     編輯:關於C#

var 是 C# 3.0 引入的語法糖,讓編譯器根據初始化運算式自動推斷區域變數型別。它不是動態型別、Variant 或晚期繫結——推斷結果在編譯期確定,生成的 IL 與顯式宣告型別完全相同。

基本語法與推斷規則


var i = 5;              // int
var d = 9.0;            // double
var s = "Hello";        // string
var arr = new[] { 1, 2, 3 }; // int[]
var anon = new { Name = "Terry", Age = 34 }; // 匿名類型
var list = new List<int>(); // List<int>
var query = from c in customers where c.City == "London" select c; // IEnumerable<Customer>

強制限制與常見錯誤

限制說明錯誤範例錯誤訊息
必須初始化宣告時必須指派值,編譯器才能推斷型別var x; x = 10;隱式型別區域變數必須已初始化
不可為 nullnull 無型別資訊,無法推斷var x = null;無法將 <null> 指派給隱式型別區域變數
僅限區域變數不可用於欄位、屬性、方法參數、回傳型別class C { var f = 1; }"var" 關鍵字只能出現在區域變數宣告中
初始化器必為運算式不可為物件/集合初始化器單獨存在(但可為包含它們的 new 運算式)var x = { A = 1 };無法從初始化器推斷型別
強型別不可變推斷完成後型別固定,不可指派不相容值var x = 10; x = "abc";無法將型別 'string' 隱式轉換為 'int'

隱式型別陣列

new[] 語法讓陣列型別同樣由元素推斷:


var a = new[] { 1, 10, 100 };           // int[]
var b = new[] { "hello", "world" };     // string[]
var c = new[] { new[]{1,2}, new[]{3,4} }; // int[][]
var d = new[] { "Luca", 123 };          // 編譯錯誤:元素型別不相容

所有元素必須隱式可轉換至單一共同型別。

適用範圍

var 可用於:

  • 區域變數宣告
  • for 迴圈初始化:for (var i = 0; i < 10; i++)
  • foreach 迴圈:foreach (var item in list)
  • using 陳述式:using (var fs = File.OpenRead(...))

最佳實踐指引

  • ✅ 型別明顯時使用 var 減少冗餘:var list = new List<string>();
  • ✅ 匿名類型、LINQ 查詢結果 必須使用 var
  • ✅ 複雜泛型型別:var dict = new Dictionary<string, List<int>>();
  • ❌ 型別不明顯時:var result = DoSomething();(維護者需查閱方法簽章)
  • ❌ 基本型別常值:var x = 10; 不如 int x = 10; 明確

團隊應建立一致的編碼風格規範,平衡簡潔與可讀性。

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