枚举时是否有Stack<T>
的定义顺序?是保证从底部(首先插入)第一个还是顶部(最后插入)? documentation for GetEnumerator
和Stack<T>.Enumerator
两者都没有明确指定,除了它在“第一个元素”之前开始,这在Stack<T>
的情况下有点模棱两可。
答案 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自动装箱的位置,但是嘿,我猜测它是内部阵列。