C# 堆栈的默认底层存储大小<;T>;

C# 堆栈的默认底层存储大小<;T>;,c#,C#,我知道堆栈的底层存储是T[],但是它的默认大小是多少?Stack.cs文件在System.Collections.Stack中显示了以下信息: private const int _defaultCapacity = 10; 在System.Collections.Generic.Stack中,默认值为4 private const int _defaultCapacity = 4; 参考: 当您询问默认的大小时(不是容量),答案是零 反编译我的版本时,我看到: /// <summar

我知道
堆栈的底层存储是
T[]
,但是它的默认大小是多少?

Stack.cs文件在System.Collections.Stack中显示了以下信息:

private const int _defaultCapacity = 10;
在System.Collections.Generic.Stack中,默认值为4

private const int _defaultCapacity = 4;
参考:
当您询问默认的大小时(不是容量),答案是

反编译我的版本时,我看到:

/// <summary>
/// Initializes a new instance of the <see cref="T:System.Collections.Generic.Stack`1"/> class that is empty and has the default initial capacity.
/// </summary>
[__DynamicallyInvokable]
public Stack()
{
  this._array = Stack<T>._emptyArray;
  this._size = 0;
  this._version = 0;
}

private static T[] _emptyArray = new T[0];
//
///初始化类的新实例,该实例为空且具有默认初始容量。
/// 
[[uuuu动态调用可禁用]
公共堆栈()
{
这个。_数组=堆栈。_emptyArray;
这个。_size=0;
此版本为0;
}
私有静态T[]_emptyArray=new T[0];

但我不确定这是否有文档记录,因此您的里程数会有所不同。

有关此类问题,请参阅.NET参考资料。(当然,这不是对其他/未来实现行为的承诺…)或者当然,您可以制作一个并使用调试程序查看其内部。我的问题是,您为什么想知道?这个问题的最佳答案是“您不需要知道这个问题的答案”。如果您想要一个特定的初始容量,那么显式地提供它。如果你不知道,那么你就不需要知道这个问题的答案。
Stack
有一个_defaultCapacity=4;值得注意的是,尽管这是首次创建
堆栈时
\u defaultCapacity
的值,但它有一个空数组。它不会创建一个可以包含项的数组,直到您尝试将某些内容放入其中。因此,这可能会误导你,当你第一次创建一个
堆栈时,
有一个数组,其中有四个项的空间,这是错误的。是的,但可能更有趣的是,为什么泛型和非泛型版本的值不同…@Ctznkane525:虽然可能很有趣,但我怀疑仍然无法回答,实际上也没有用。您可以随时将其作为一个问题来提问,看看社区中是否有人能够回答它(但开发人员的推理通常很难回答)。“size”是项目数,因此对于新(空)堆栈,它将为0:}