Stack <>构造函数在从其他堆栈初始化时是否反转堆栈?

ska*_*eff 6 c# stack reverse constructor

这是代码:

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));
Run Code Online (Sandbox Code Playgroud)

然后让我们看看结果

        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() + ",";
        }
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

s stack:4,3,2,1,

ns stack:1,2,3,4,

nss stack:4,3,2,1,
Run Code Online (Sandbox Code Playgroud)

因此,ns堆栈是还原s堆栈,堆栈与nss堆栈相同s.

Jon*_*eet 13

抓取IEnumerable<T>项目的堆栈构造函数就像Add多次调用一样.

迭代堆栈以"pop"顺序迭代...所以当你从另一个堆栈构造一个堆栈时,它将首先添加原始堆栈的顶部,然后在新的堆栈中添加"从顶部开始的第二个"元素堆栈等...有效地逆转它.