如何确定 C# 字典的当前容量?

Tub*_*iar 5 c# dictionary allocation

List 有单独的属性用于获取Count及其Capacity。与所有集合一样,字典也具有Count属性,并且它具有容量,因为它有几个允许您指定它的构造函数,并且Add方法的文档提到了它。但是,我没有看到任何查询字典当前容量的方法。

即使无法获取字典的当前容量,是否有任何方法可以预测何时可能发生重新分配?

Zei*_*kki 1

字典的工作方式并不完全像列表。如果你检查微软提供的源代码。您可以找到多个可能有帮助的私有字段。

请注意,这是一个封装的实现细节,您不应在生产代码中依赖它,因为私有和内部成员的名称、行为可能会发生变化,恕不另行通知!

您有内部数组int[] bucketsEntry[] entries. 你还有int freeListint freeCount。您可以使用反射来解决这些问题。

要回答您的问题,是的,每次插入都会触发重新分配,这是实际的代码:

int index;
if (freeCount > 0)
{
    index = freeList;
    freeList = entries[index].next;
    freeCount--;
}
else
{
    if (count == entries.Length)
    {
        Resize();
        targetBucket = hashCode % buckets.Length;
    }
    index = count;
    count++;
}
Run Code Online (Sandbox Code Playgroud)