C# dictionnaire TryGetValue avec les valeurs int, comment éviter le double de recherche

Lorsque vous faites quelque chose comme:

int value;
if (dict.TryGetValue(key, out value))
{
    if (condition)
    {
        //value = 0;  this copies by value so it doesn't change the existing value
        dict[key] = 0;
    }
}
else
{
    dict[key] = 0;
}

Est il possible que je peux éviter de recherche d'index pour remplacer la valeur existante? Je suis déjà à la vérification de la clé existe à l'aide de TryGetValue de sorte qu'il semble être un gaspillage de récupérer la valeur par l'indice de nouveau.

Sur une note séparée, comme dans le else{} une partie de mon code, il est généralement considéré comme une bonne pratique d'utiliser l'indexeur lors de l'ajout de nouveaux ou de remplacement des anciennes valeurs, et d'ajouter pour le rendre clair, vous l'ajoutez et non de le remplacer? Ou devrais-je simplement utiliser l'indexeur à chaque fois? La façon dont j'ai appris à utiliser un dictionnaire, je fais toujours un TryGetValue de recherche et dans la partie else je gérer les cas où aucune touche n'existe.

vous n'êtes pas regardant à deux fois.
L'utilisation de l'indexeur fait une recherche IIRC ;p
est-ce que votre (condition) dépendent de value?
oui, il fait une comparaison
Concernant votre question mineure, personnellement, je préfère dict.Add(key, 0) sur dict[key] = 0 dans le cas où vous le key est nouveau.

OriginalL'auteur tmakino | 2013-04-09