4.5 使用相應的泛型版本替換Stack和Queue
問題
您希望通過將所有Stack和Queue對象替換為相應的泛型版本以提高應用程序的效率,並使得代碼更易於使用。當結構體或其他值類型存儲在這些數據結構中時,會導致裝箱/拆箱操作,這時就需要這麼做。
解決方案
使用System.Collections.Generic.Stack和System.Collections.Generic.Queue對象來替換現有的System.Collections.Stack和System.Collections.Queue對象。
這裡有一個簡單地使用System.Collections.Queue對象的簡單例子:
public static void UseNonGenericQueue()
{
// 創建一個非泛型隊列對象
Queue numericQueue = new Queue();
// 進隊(導致裝箱操作).
numericQueue.Enqueue(1);
numericQueue.Enqueue(2);
numericQueue.Enqueue(3);
//出隊並顯示項(導致拆箱操作)
Console.WriteLine(numericQueue.Dequeue());
Console.WriteLine(numericQueue.Dequeue());
Console.WriteLine(numericQueue.Dequeue().ToString());
}
下面是相同的代碼使用了System.Collections.Generic.Queue對象
public static void UseGenericQueue()
{
// 創建一個泛型隊列對象.
Queue<int> numericQueue = new Queue<int>();
// 進隊.
numericQueue.Enqueue(1);
numericQueue.Enqueue(2);
numericQueue.Enqueue(3);
// 出隊並顯示項目.
Console.WriteLine(numericQueue.Dequeue());
Console.WriteLine(numericQueue.Dequeue());
Console.WriteLine(numericQueue.Dequeue());
}
下面是一個簡單地使用System.Collections.Stack對象的例子
public static void UseNonGenericStack()
{
// 創建一個非泛型棧.
Stack numericStack = new Stack();
// 進棧(導致裝箱操作).
numericStack.Push(1);
numericStack.Push(2);
numericStack.Push(3);
// 出棧並顯示項目(導致拆箱操作).
Console.WriteLine(numericStack.Pop().ToString());
Console.WriteLine(numericStack.Pop().ToString());
Console.WriteLine(numericStack.Pop().ToString());
}
下面是相同的代碼使用了System.Collections.Generic.Stack對象
public static void UseGenericStack()
{
// 創建一個泛型棧對象.
Stack<int> numericStack = new Stack<int>();
// 進棧.
numericStack.Push(1);
numericStack.Push(2);
numericStack.Push(3);
// 出棧並顯示項目.
Console.WriteLine(numericStack.Pop().ToString());
Console.WriteLine(numericStack.Pop().ToString());
Console.WriteLine(numericStack.Pop().ToString());
}