Важным моментом, еще не упомянутым, является то, что, если TValue
является типом класса, вещи, удерживаемые Dictionary<TKey,TValue>
, будут идентичностями TValue
объектов . Если кто-то получает ссылку из словаря, словарь не будет ни знать, ни заботиться о том, что он может делать с объектом, на который он ссылается.
Один полезный маленький служебный класс в тех случаях, когда все ключи, связанные со словарем, будут известны заранее для кода, который должен его использовать:
class MutableValueHolder<T>
{
public T Value;
}
Если кто-то хочет, чтобы многопоточный код подсчитывал, сколько раз различные строки появляются в куче файлов, и кто-то заранее знает все интересующие строки, тогда можно использовать что-то вроде Dictionary<string, MutableValueHolder<int>>
для этой цели. Как только словарь загружен со всеми надлежащими строками и экземпляром MutableValueHolder<int>
для каждого из них, любое количество потоков может извлечь ссылки на MutableValueHolder<int>
объекты и использовать Threading.Interlocked.Increment
или другие подобные методы для изменения связанного Value
с каждым без необходимости писать в словарь вообще.