В некотором устаревшем коде я видел следующий метод расширения, чтобы упростить добавление нового элемента значения ключа или обновление значения, если ключ уже существует.
Метод 1 (старый код).
public static void CreateNewOrUpdateExisting<TKey, TValue>(
this IDictionary<TKey, TValue> map, TKey key, TValue value)
{
if (map.ContainsKey(key))
{
map[key] = value;
}
else
{
map.Add(key, value);
}
}
Хотя я проверил, что map[key]=value
делает ту же самую работу. То есть этот метод можно заменить на метод 2 ниже.
Метод-2.
public static void CreateNewOrUpdateExisting<TKey, TValue>(
this IDictionary<TKey, TValue> map, TKey key, TValue value)
{
map[key] = value;
}
Теперь мой вопрос ... Могут ли быть какие-либо проблемы, если я заменю Метод 1 на Метод 2? Это сломается в любом возможном сценарии?
Кроме того, я думаю, что раньше это была разница между HashTable и Dictionary. HashTable позволяет обновить элемент или добавить новый элемент с помощью индексатора, а словарь - нет! Устранена ли эта разница в версиях C #> 3.0?
Целью этого метода является не слишком выбрасывать исключение, если пользователь снова отправляет то же значение ключа, метод должен просто обновить запись новым значением и создать новую запись, если в метод была отправлена новая пара ключ-значение. ,
источник