如何重置字典

时间:2009-12-30 07:04:54

标签: c# dictionary

如果我宣布这样的字典:

private static Dictionary<string, object> aDict = new Dictionary<string, object>();

现在我想在其他地方使用它。我该如何重置它?

aDict = new Dictionary<string, object>(); // like this?

aDict = null; // or like this?

或其他重置样式?

7 个答案:

答案 0 :(得分:84)

您可以简单地使用Clear方法,它将删除所有键和值,然后您可以重复使用它而无需创建新实例:

aDict.Clear();

答案 1 :(得分:14)

试试这个

aDict.Clear();

答案 2 :(得分:11)

aDict.Clear();将有效。

答案 3 :(得分:11)

aDict.Clear();是唯一的方法,因为您不想更改引用并在另一个地方保留相同的对象

答案 4 :(得分:1)

几乎每个人都回答说,.Clear() 类中提供的 Dictionary 方法应该是这里的方法(完全同意)。

只是为了明确说明(当然对于新手;))为什么不使用其他方法,例如每次我们需要刷新字典时创建一个新实例

aDict = new Dictionary<string, object>(); // like this?

因为即使这种方式有效,它也不是一种内存高效的方法,因为这会创建一个新实例并留下字典的旧实例等待 GC(垃圾收集器)处置它(因为它不再被提及)。所以你会同意在不需要时不消耗额外的内存:)

aDict = null; // or like this?

因为这会使您的实例设置为 null 并且下次因为 OP 想要将其用作 dict,所以 OP 必须创建另一个实例(是的,您做对了,内存效率不高) 而且这不会是更好的编程风格,因为有人可能最终会在 .ContainsKey() 变量上执行 aDict(或任何与此相关的字典操作)并导致 nullPointerException< /strong> 如果 aDict 仍然指向一个空对象。

希望这个解释有帮助!!感谢阅读!

答案 5 :(得分:0)

在Dictionary对象上的Resharper中运行Clear方法的反编译显示如下:

/// <summary>Removes all keys and values from the <see cref="T:System.Collections.Generic.Dictionary`2" />.</summary>
[__DynamicallyInvokable]
public void Clear()
{
  if (this.count <= 0)
    return;
  for (int index = 0; index < this.buckets.Length; ++index)
    this.buckets[index] = -1;
  Array.Clear((Array) this.entries, 0, this.count);
  this.freeList = -1;
  this.count = 0;
  this.freeCount = 0;
  ++this.version;
}

字典包含存储桶和其他控制变量的整数数组,这些存储桶和其他控制变量都设置为-1或0,以有效地从字典对象中清除键和值。正如我们在.NET源代码中所看到的那样,有很多变量表示字典的有效状态。有趣。

答案 6 :(得分:0)

如果在字典可能为空的情况下调用清除,那么先调用Count即可

if (aDict.Count > 0)
{
    aDict.Clear();
}

计数可能比Clear快,因此避免在零元素字典上运行Clear。