Stack 对象的默认容量是多少?

What is the default capacity of Stack object?

Stack 对象的默认容量是多少? 听说是10,但是在MSDN上找不到。看到这个 google book.

我也在练习一个软件的认证测试。它具有相同的结果。看图。

但是我发现了一些interesting answers which are different.

如果您查看当前的源代码,它也显示 10。

http://referencesource.microsoft.com/#mscorlib/system/collections/stack.cs,7c1d0a7ea96800a3,references

System.Collection.Stack 的默认容量为 10。

System.Collection.Generic.Stack<T> 的默认容量为 0。

直接在源码里自己看吧:

以上所有内容都是关于当前的 .NET 实现,将来可能会更改。

在 C# 中,一个 Stack<T> 开始时容量为 0(它包含一个空数组),然后当您添加一个项目时,容量将为 4。之后,如果数组已满当您添加一个项目时,它的大小会增加一倍。

你可以在源码里自己看:Stack

你提到了 10 个。我认为在 Java 中,集合的容量从 10 个开始。

可以用反射来看:

var stack = new Stack();
var fieldInfo = typeof(Stack).GetField("_array", BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine((fieldInfo.GetValue(stack) as object[]).Length); // 10

var genericStack = new Stack<int>();
var genericFieldInfo = typeof(Stack<int>).GetField("_array", BindingFlags.NonPublic | BindingFlags.Instance);
Console.WriteLine((genericFieldInfo.GetValue(genericStack) as int[]).Length); // 0