En algunos códigos heredados, he visto el siguiente método de extensión para facilitar la adición de un nuevo elemento clave-valor o la actualización del valor, si la clave ya existe.
Método 1 (código heredado).
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);
}
}
Sin embargo, he comprobado que map[key]=value
hace exactamente el mismo trabajo. Es decir, este método podría reemplazarse con el Método 2 a continuación.
Método 2.
public static void CreateNewOrUpdateExisting<TKey, TValue>(
this IDictionary<TKey, TValue> map, TKey key, TValue value)
{
map[key] = value;
}
Ahora, mi pregunta es ... ¿Podría haber algún problema si reemplazo el Método-1 por el Método-2? ¿Se romperá en algún escenario posible?
Además, creo que esto solía ser la diferencia entre HashTable y Dictionary. HashTable permite actualizar un elemento, o agregar un nuevo elemento mediante el indexador, mientras que el diccionario no lo hace. ¿Se ha eliminado esta diferencia en las versiones C #> 3.0?
El objetivo de este método no es lanzar una excepción si el usuario envía el mismo valor clave nuevamente, el método solo debe actualizar la entrada con el nuevo valor y hacer una nueva entrada si se ha enviado un nuevo par clave-valor al método .
fuente