Получение функциональности "AddOrReplace" с помощью ConcurrentDictionary - PullRequest
2 голосов
/ 28 сентября 2010

Я использую ConcurrentDictionary для создания простого кеша объектов. Я пытаюсь атомарно добавить элемент в коллекцию, если ключ не существует, или заменить предыдущий элемент, если ключ уже существует, т.е. «AddOrReplace». Кажется, нет очевидного способа сделать это. Может кто-нибудь подсказать как?

Ответы [ 2 ]

11 голосов
/ 28 сентября 2010

Разве вы не можете просто использовать индексатор?

dictionary[key] = value;

См. запись в блоге Стивена Тауба :

Если вы хотите ...
[...]

  • Сохранение пары ключ / значение в словаре безоговорочно, перезаписывая любое значение для этого ключа, если ключ уже существует ...

    • Используйте установщик индексатора, например, словарь [ключ] = новое значение.

      public TValue this[TKey key] { get; set; }
      

Это будет перезаписать существующее значение с новым - правильно ли я сказал, что вы этого хотите, вместо того, чтобы основывать новое значение на существующем?

0 голосов
/ 28 сентября 2010

Звучит так, будто вы ищете метод AddOrUpdate .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...