Dans certains codes hérités, j'ai vu la méthode d'extension suivante pour faciliter l'ajout d'un nouvel élément clé-valeur ou la mise à jour de la valeur, si la clé existe déjà.
Méthode-1 (code hérité).
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);
}
}
Bien que j'aie vérifié que map[key]=value
fait exactement le même travail. C'est-à-dire que cette méthode pourrait être remplacée par la Méthode-2 ci-dessous.
Méthode-2.
public static void CreateNewOrUpdateExisting<TKey, TValue>(
this IDictionary<TKey, TValue> map, TKey key, TValue value)
{
map[key] = value;
}
Maintenant, ma question est.. Y a-t-il un problème si je remplace la méthode 1 par la méthode 2 ? Est-ce que ça va casser dans n'importe quel scénario possible ?
De plus, je pense que c'était la différence entre HashTable et Dictionary. HashTable permet de mettre à jour un élément, ou d'ajouter un nouvel élément en utilisant un indexeur, alors que Dictionary ne le permet pas ! Cette différence a-t-elle été éliminée dans les versions C# > 3.0 ?
L'objectif de cette méthode n'est pas de lever une exception si l'utilisateur envoie à nouveau la même clé-valeur, la méthode doit simplement mettre à jour l'entrée avec la nouvelle valeur, et créer une nouvelle entrée si une nouvelle paire clé-valeur a été envoyée à la méthode.