Em algum código legado, vi o seguinte método de extensão para facilitar a adição de um novo item de valor-chave ou a atualização do valor, se a chave já existir.
Método-1 (código herdado).
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);
}
}
No entanto, verifiquei que map[key]=value
faz exatamente o mesmo trabalho. Ou seja, esse método pode ser substituído pelo método 2 abaixo.
Método-2.
public static void CreateNewOrUpdateExisting<TKey, TValue>(
this IDictionary<TKey, TValue> map, TKey key, TValue value)
{
map[key] = value;
}
Agora, minha pergunta é .. Poderia haver algum problema se eu substituir o método 1 pelo método 2? Vai quebrar em qualquer cenário possível?
Além disso, acho que essa costumava ser a diferença entre HashTable e Dictionary. O HashTable permite atualizar um item ou adicionar um novo item usando o indexador, enquanto o Dictionary não faz !! Essa diferença foi eliminada nas versões C #> 3.0?
O objetivo deste método não é lançar exceção se o usuário enviar o mesmo valor-chave novamente, o método deve apenas atualizar a entrada com o novo valor e criar uma nova entrada se o novo par de valores-chave tiver sido enviado ao método .