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

C# 3.0 基礎語言增強:隱式類型變量與數組、對象集合初始化器、匿名類型

     編輯:關於C語言

隱式類型區域變量:var

編譯器推斷驗證


var i = 5;       // int
var s = "hello"; // string
var d = 1.5;     // double
// IL 元數據中已嵌入確切類型

兩大限制

  1. 僅限區域變量(類字段用 var ❌)
  2. 必須有初始化器(var x; ❌)

隱式類型化數組


var ia = new[] { 1, 2, 3, 4, 5 };       // int[]
var da = new[] { 1.1, 2, 3, 4, 5 };     // double[](整數隱式轉 double)
var sa = new[] { "Hello", "World" };    // string[]

// 類型不兼容失敗
var aa = new[] { 1, "Hello", 2.0 }; // ❌ No array type can be inferred

規則:元素列表必須存在「最佳通用類型」,其他元素隱式可轉換至該類型。

對象初始化器

語法


var book = new Book 
{ 
    Name = "First", 
    Isbn = "1-111", 
    Price = 88.0f 
};
// 屬性順序任意、可部分賦值、可留空(默認值)

編譯器翻譯


var book = new Book();
book.Name = "First";
book.Isbn = "1-111";
book.Price = 88.0f;

集合初始化器


var list = new List { 1, 2, 3, 4, 5 };
// 編譯器生成循環調用 list.Add(...)

要求:實現 ICollection<T>、明確泛型參數 T、元素隱式轉換至 T。

匿名類型

動機

臨時聚合相關數據(如查詢投影),無需寫「樣本代碼」(私有字段+屬性+構造函數)。

聲明與特性


var b1 = new { Name = "Book1", Price = 88.0f };
var b2 = new { Price = 25.0f, Name = "Book2" }; // 順序不同 → 不同類型
var b3 = new { Name = "Book3", Price = 35.0f }; // 與 b1 同類型

類型身份規則

  • 同程序集、屬性名/類型/順序完全一致 → 同一類型
  • 順序不同 → 不同類型(b1 = b3 ✅,b1 = b2 ❌)
  • 跨程序集 → 即使結構相同也可能不同類型,不可跨程序集傳遞

運行時類型名


Console.WriteLine(b1.GetType()); 
// 輸出:Namespace.Program+f__0(包含特殊字符,源碼不可訪問)

總結

這四大特性(var、隱式數組、初始化器、匿名類型)層層遞進:var 為匿名類型提供聲明載體,初始化器為匿名類型提供賦值語法,隱式數組為匿名類型數組提供聲明方式。它們共同為 Lambda 表達式與 LINQ 查詢表達式奠定了語法基礎。

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