Here is the code:
var s = new Stack<int>();
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
var ns = new Stack<int>(s);
var nss = new Stack<int>(new Stack<int>(s));
and then let’s see the result
tbLog.Text += "s stack:";
while(s.Count > 0)
{
tbLog.Text += s.Pop() + ",";
}
tbLog.Text += Environment.NewLine;
tbLog.Text += "ns stack:";
while (ns.Count > 0)
{
tbLog.Text += ns.Pop() + ",";
}
tbLog.Text += Environment.NewLine;
tbLog.Text += "nss stack:";
while (nss.Count > 0)
{
tbLog.Text += nss.Pop() + ",";
}
produces the following output:
s stack:4,3,2,1,
ns stack:1,2,3,4,
nss stack:4,3,2,1,
So, ns stack is reverted s stack and nss stack is the same as s stack.
The stack constructor which takes an
IEnumerable<T>pushes the items on as ifAddwere called multiple times.Iterating over a stack iterates in “pop” order… so when you construct one stack from another, it will add the top of the original stack first, then put the “second from the top” element on top of that in the new stack, etc… effectively reversing it.