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());
}