如果我宣布这样的字典:
private static Dictionary<string, object> aDict = new Dictionary<string, object>();
现在我想在其他地方使用它。我该如何重置它?
aDict = new Dictionary<string, object>(); // like this?
aDict = null; // or like this?
或其他重置样式?
答案 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。