3

我有以下代码:

Queue<string> oldQueue = new Queue<string>();

oldQueue.Enqueue("One");
oldQueue.Enqueue("Two");
oldQueue.Enqueue("Three");

Queue newQueue = oldQueue;
string newString = newQueue.Dequeue();

问题是,一旦我将项目从 出列newQueue,该项目也会从出列oldQueue。有没有办法“克隆”一个队列,从一个队列中删除一个项目将保持它的克隆队列不变?

4

2 回答 2

24

您必须进行更深入的复制:

   //Queue newQueue = oldQueue;
   Queue<string> newQueue = new Queue<string>(oldQueue);
于 2013-04-25T08:26:09.657 回答
2

Queue 是一个引用类型,所以 newQueue 和 oldQueue 持有一个指向同一个对象的指针。他们是一样的 ;-)

请参阅有关如何使用反射进行“深度克隆”的答案:

在 Silverlight 的扩展方法中使用反射进行深度复制?

于 2013-04-25T08:23:47.123 回答