Каков правильный подход при попытке удалить некоторые элементы в ConcurrentDictionary?C#

Место общения программистов C#
Ответить
Anonymous
 Каков правильный подход при попытке удалить некоторые элементы в ConcurrentDictionary?

Сообщение Anonymous »

Это лучше:

Код: Выделить всё

public void Test()
{
ConcurrentDictionary dictionary = new();

dictionary.TryAdd(0, "A");
dictionary.TryAdd(1, "B");
dictionary.TryAdd(2, "A");
dictionary.TryAdd(3, "D");

foreach (var item in dictionary)
{
string foundItem;

if (dictionary.TryGetValue(item.Key, out foundItem))
{
if (foundItem == "A")
{
if (dictionary.TryRemove(item.Key, out foundItem))
{
// Success
}
}
}
}
}
Чем это?:

Код: Выделить всё

public void Test2()
{
ConcurrentDictionary dictionary = new();

dictionary.TryAdd(0, "A");
dictionary.TryAdd(1, "B");
dictionary.TryAdd(2, "A");
dictionary.TryAdd(3, "D");

foreach (var item in dictionary)
{
string foundItem;

if (item.Value == "A")
{
if (dictionary.TryRemove(item.Key, out foundItem))
{
// Success
}
}
}
}
К этому методу будут обращаться несколько потоков.
Меня смущает то, что всякий раз, когда я хочу удалить элемент, я сначала пытаюсь его получить, затем удалите его. Но во-первых, я использовал цикл foreach, то есть элемент уже получен. Любая идея будет оценена по достоинству.

Подробнее здесь: https://stackoverflow.com/questions/291 ... rrentdicti
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»