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

C# 泛型集合升級指南:Stack 與 Queue 的泛型版本優勢

     編輯:關於C#

為何要換用泛型 Stack<T> / Queue<T>?

非泛型 System.Collections.Stack/Queue 僅存 object,值類型入隊/出隊會發生裝箱/拆箱,且缺乏型別安全。泛型版本在編譯期鎖定元素型別,完全避免此開銷。

程式碼對比

非泛型(裝箱/拆箱)

var q = new Queue();
q.Enqueue(1);           // 裝箱
int i = (int)q.Dequeue(); // 拆箱 + 強制轉型

泛型(零裝箱、型別安全)

var q = new Queue<int>();
q.Enqueue(1);           // 直接存 int
int i = q.Dequeue();    // 直接取 int,無轉型

核心優勢總表

維度非泛型泛型
型別安全執行期檢查編譯期檢查
效能值類型裝箱/拆箱零裝箱,直接操作
程式碼簡潔度需轉型、易出錯無轉型、意圖明確
開發效率需自寫強型別包裝類一行宣告即完成

隱式轉換規則

Queue<int> 可接受 short(隱式轉 int),但拒絕 double(需顯式 (int)d)。這正是編譯期型別檢查的體現。

缺少的成員與替代方案

泛型版移除 Clone、IsSynchronized、SyncRoot、Synchronized。替代方案:

  • 複製:new Queue<int>(existingQueue) 建構子接受 IEnumerable<T> 完成淺拷貝。
  • 執行緒安全:官方建議自行 lock(queue.SyncRoot) 或使用 ConcurrentQueue<T>。

完整複製範例

var src = new Queue<int>(); src.Enqueue(1); src.Enqueue(2);
var clone = new Queue<int>(src); // 獨立副本
foreach (var i in clone) Console.WriteLine(i); // 僅枚舉,不出隊

結語

全面遷移至 Stack<T>/Queue<T> 是現代 C# 專案的基本功,帶來型別安全、效能提升與維護性改善的三重紅利。

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