Ответ 1
Вы можете просто использовать метод Clear, он удалит все ключи и значения, после чего вы сможете повторно использовать его, не создавая новые экземпляры:
aDict.Clear();
Если я объявил такой словарь следующим образом:
private static Dictionary<string, object> aDict = new Dictionary<string, object>();
И теперь я хочу использовать его в другом месте. Как это сделать reset?
aDict = new Dictionary<string, object>(); // like this?
aDict = null; // or like this?
или другие стили reset?
Вы можете просто использовать метод Clear, он удалит все ключи и значения, после чего вы сможете повторно использовать его, не создавая новые экземпляры:
aDict.Clear();
Попробуйте это
aDict.Clear();
aDict.Clear();
будет работать.
aDict.Clear();
- единственный способ, так как вы не хотите менять ссылку и сохраняете тот же объект в другом месте
Выполнение декомпилирования метода Clear в Resharper на объекте Dictionary показывает следующее:
/// <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. Интересно.
Хорошо бы позвонить Count перед вызовом Clear, если словарь может быть пустым
if (aDict.Count > 0)
{
aDict.Clear();
}
Подсчет предположительно быстрее чем Очистить, поэтому вы избегаете запуска Очистить словарь с нулевыми элементами.