C# dictionary TryGetValue mit int-Werten, wie Sie vermeiden Doppel-lookup

Wenn dabei so etwas wie:

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;
}

Gibt es eine Möglichkeit kann ich vermeiden, index-lookup ersetzen Sie den vorhandenen Wert? Ich bin schon die überprüfung der Schlüssel vorhanden ist mit TryGetValue, so dass es scheint wie eine Verschwendung zu haben, abrufen Wert von index wieder.

Auf einem separaten Hinweis, wie in der else{} Teil von meinem code ist es im Allgemeinen als gute Praxis, verwenden Sie den indexer, wenn das hinzufügen von neuen oder die Ersetzung der alten Werte, und fügen Sie es zu machen klar, das Sie hinzufügen, und nicht zu ersetzen? Oder soll ich einfach verwenden Sie den indexer, jedes mal? Die Art und Weise habe ich gelernt, Wörterbuch benutzen, mache ich immer eine TryGetValue-lookup und in der else-Teil I behandeln Fälle, in denen kein Schlüssel vorhanden ist.

  • Sie sind nicht auf der Suche es zweimal.
  • Mit dem indexer hat eine lookup-wenn ich mich Recht erinnere ;p
  • hat Ihr (Zustand) abhängig value?
  • ja, es macht einen Vergleich
  • if (!dict.TryGetValue(key, out value) || value > 0) { dict[key] = 0; } können Sie value, da wirst du nur bekommen Vergangenheit die || wenn die TryGet gearbeitet.
  • Es klingt fast wie ein Verweis auf den Eimer wird der Wert gespeichert. Dies ist nicht ausgesetzt .NET. Auch würden Sie haben, um mit einem valuetype-Eimer, könnte schwierig sein.
  • In Bezug auf deine kleine Frage, ich persönlich würde lieber dict.Add(key, 0) über dict[key] = 0 in den Fällen, wo man weiß, die key ist neu.

InformationsquelleAutor tmakino | 2013-04-09
Schreibe einen Kommentar