C# 堆栈 - Clone() 方法
C# 堆栈的 Clone() 方法用于创建堆栈的浅拷贝。
浅拷贝会创建一个新对象,该新对象引用与原始对象相同的数据,但不直接引用原始数据。此方法的复杂度为 O(n),其中 n 为计数。
需要注意的是,通用 stack<T> 类不支持 Clone() 方法。但是,system.collection 中的非泛型堆栈支持 Clone(),因为它实现了 ICloneable 接口。
语法
以下是 C# 堆栈 Clone() 方法的语法 -
public virtual object? Clone();
参数
此方法不接受任何参数。
返回值
此方法返回堆栈的浅拷贝
示例 1:创建堆栈的浅拷贝
以下是 Clone() 方法的基本示例,用于返回堆栈的顶部元素 -
using System;
using System.Collections;
class Program {
static void Main() {
Stack originalStack = new Stack();
// 将元素压入堆栈
originalStack.Push("Hello");
originalStack.Push("tutorialspoint");
originalStack.Push(50);
// 克隆堆栈
Stack clonedStack = (Stack)originalStack.Clone();
// 显示克隆的堆栈元素
Console.WriteLine("Cloned Stack Elements:");
foreach (var item in clonedStack) {
Console.WriteLine(item);
}
}
}
输出
以下是输出 -
Cloned Stack Elements: 50 tutorialspoint Hello
示例 2:克隆堆栈
本例中,我们演示如何使用"System.Collections.Stack"的 Clone() 方法创建堆栈的浅拷贝 -
using System;
using System.Collections;
class Example {
static void Main() {
Stack originalStack = new Stack();
originalStack.Push("Apple");
originalStack.Push("Banana");
originalStack.Push("Cherry");
// 克隆堆栈
Stack clonedStack = (Stack)originalStack.Clone();
// 显示原始堆栈
Console.WriteLine("Original Stack Elements:");
foreach (var item in originalStack) {
Console.WriteLine(item);
}
// 显示克隆的堆栈
Console.WriteLine("Cloned Stack Elements:");
foreach (var item in clonedStack) {
Console.WriteLine(item);
}
// 检查两个堆栈是否具有相同的数量
Console.WriteLine("Are both stacks equal in size? " + (originalStack.Count == clonedStack.Count));
}
}
输出
以下是输出 -
Original Stack Elements: Cherry Banana Apple Cloned Stack Elements: Cherry Banana Apple Are both stacks equal in size? True
示例 3:移除一个对象后进行克隆
以下示例演示了 Clone() 方法,该方法在从堆栈中移除一个对象后创建堆栈的浅拷贝 -
using System;
using System.Collections;
class Example {
static void Main() {
Stack originalStack = new Stack();
originalStack.Push("Apple");
originalStack.Push("Banana");
originalStack.Push("Cherry");
// 显示原始堆栈
// 弹出之前
Console.WriteLine("Original Stack Elements:");
foreach (var item in originalStack) {
Console.WriteLine(item);
}
Console.WriteLine("");
// 弹出一个元素
Console.Write("Popped Element: "+ originalStack.Pop() + "
");
// 克隆堆栈
Stack clonedStack = (Stack)originalStack.Clone();
// 显示克隆的堆栈
Console.WriteLine("Cloned Stack Elements:");
foreach (var item in clonedStack) {
Console.WriteLine(item);
}
}
}
输出
以下是输出 -
Original Stack Elements: Cherry Banana Apple Popped Element: Cherry Cloned Stack Elements: Banana Apple

csharp_stack.html