.NET中的“Stack <t>”顺序

时间:2018-05-01 18:00:13

标签: .net stack

枚举时是否有Stack<T>的定义顺序?是保证从底部(首先插入)第一个还是顶部(最后插入)? documentation for GetEnumeratorStack<T>.Enumerator两者都没有明确指定,除了它在“第一个元素”之前开始,这在Stack<T>的情况下有点模棱两可。

1 个答案:

答案 0 :(得分:0)

GetEnumerator可能是针对Stack唯一实现的。我们来看看:

来自https://referencesource.microsoft.com/#System/compmod/system/collections/generic/stack.cs

    // Pushes an item to the top of the stack.
    // 
    /// <include file='doc\Stack.uex' path='docs/doc[@for="Stack.Push"]/*' />
    public void Push(T item) {
        if (_size == _array.Length) {
            T[] newArray = new T[(_array.Length == 0) ? _defaultCapacity : 2*_array.Length];
            Array.Copy(_array, 0, newArray, 0, _size);
            _array = newArray;
        }
        _array[_size++] = item;
        _version++;
    }

    // Returns an IEnumerator for this Stack.
    /// <include file='doc\Stack.uex' path='docs/doc[@for="Stack.GetEnumerator"]/*' />
    public Enumerator GetEnumerator() {
        return new Enumerator(this);
    }

..所以看起来最后一个是枚举器中的最后一个,推出的第一个将是foreach中的第一个。我无法看到return new Enumerator(this)this为调查员ctor自动装箱的位置,但是嘿,我猜测它是内部阵列。