Während Effizienz ein Anliegen ist, die in der Software-Entwicklung in Betracht gezogen werden sollte, ist es nicht der einzige. Wenn es keine Einschränkungen wie Leistungsanforderungen oder das Speichern von Akkus auf einem eingebetteten oder mobilen Gerät gibt, stehen in der Regel andere nicht funktionale Anforderungen an erster Stelle. Die Wartbarkeit (und damit die Verständlichkeit Ihres Codes) hat normalerweise eine höhere Priorität.
In Anbetracht dessen sollten Sie sich nicht auf eine Option beschränken. Verwenden Sie TryGet
, wenn es kein Fehler ist, wenn der Wert im Wörterbuch nicht vorhanden ist. Verwenden Sie den Indexer, wenn Sie einen fehlenden Wert als Fehler betrachten.
Nachdem gesagt, dass, wenn Sie die the reference source für die tatsächliche Implementierung überprüfen, erhalten beide den Indexer und TryGet
den Wert aus der FindEntry
. TryGet
akquiriert den Standardwert (billig) und gibt zurück. Der Indexer gibt nicht nur zurück, sondern zusätzlich löst eine Ausnahme aus. Das macht es teurer.
Wenn ich rate, ist das Aufwickeln des Stapels teurer als ein Hash-Lookup. Es gibt nur einen Weg, das herauszufinden! –
Sie können immer 'TryGetValue' verwenden wie 'if (myDict.TryGetValue (k, out v)) return v; else return null; ' – dcg
Wenn Sie eine Möglichkeit haben, eine Ausnahme zu vermeiden, verwenden Sie sie. – Steve