Wörterbücher (C # oder anders) sind einfach ein Container, in dem Sie einen Wert basierend auf einem Schlüssel nachschlagen. In vielen Sprachen wird es korrekter als Map identifiziert, wobei die häufigste Implementierung eine HashMap ist.
Das zu berücksichtigende Problem ist, was passiert, wenn ein Schlüssel nicht vorhanden ist. Einige Sprachen verhalten sich durch Rücksendung null
oder nil
oder einen anderen Gegenwert. Stille Vorgabe eines Werts, anstatt Sie darüber zu informieren, dass kein Wert vorhanden ist.
Die C # -Bibliotheksdesigner hatten sich eine Redewendung ausgedacht, um mit dem Verhalten umzugehen. Sie argumentierten, dass das Standardverhalten beim Suchen eines nicht vorhandenen Werts darin besteht, eine Ausnahme auszulösen. Wenn Sie Ausnahmen vermeiden möchten, können Sie die Try
Variante verwenden. Dies ist der gleiche Ansatz, den sie zum Parsen von Zeichenfolgen in Ganzzahlen oder Datums- / Uhrzeitobjekte verwenden. Im Wesentlichen ist die Auswirkung wie folgt:
T count = int.Parse("12T45"); // throws exception
if (int.TryParse("12T45", out count))
{
// Does not throw exception
}
Und das übertrug sich auf das Wörterbuch, dessen Indexer delegiert an Get(index)
:
var myvalue = dict["12345"]; // throws exception
myvalue = dict.Get("12345"); // throws exception
if (dict.TryGet("12345", out myvalue))
{
// Does not throw exception
}
Dies ist einfach die Art und Weise, wie die Sprache gestaltet ist.
Sollte out
Variablen entmutigt werden?
C # ist nicht die erste Sprache, die sie hat, und sie haben ihren Zweck in bestimmten Situationen. Wenn Sie versuchen, ein System mit hoher Gleichzeitigkeit zu erstellen, können Sie es nicht verwendenout
Variablen an den Parallelitätsgrenzen verwenden.
In vielerlei Hinsicht versuche ich, diese Redewendungen in meine APIs aufzunehmen, wenn es eine Redewendung gibt, die von den Anbietern von Sprach- und Kernbibliotheken vertreten wird. Dadurch fühlt sich die API in dieser Sprache konsistenter und besser aufgehoben. Eine in Ruby geschriebene Methode sieht also nicht wie eine in C #, C oder Python geschriebene Methode aus. Sie verfügen jeweils über eine bevorzugte Methode zum Erstellen von Code. Wenn Sie damit arbeiten, können die Benutzer der API diese schneller erlernen.
Sind Maps im Allgemeinen ein Anti-Pattern?
Sie haben ihren Zweck, aber oft sind sie die falsche Lösung für den Zweck, den Sie haben. Besonders wenn Sie eine bidirektionale Abbildung haben, die Sie benötigen. Es gibt viele Container und Möglichkeiten, Daten zu organisieren. Es gibt viele Ansätze, die Sie verwenden können, und manchmal müssen Sie ein wenig nachdenken, bevor Sie diesen Container auswählen.
Wenn Sie eine sehr kurze Liste bidirektionaler Zuordnungswerte haben, benötigen Sie möglicherweise nur eine Liste von Tupeln. Oder eine Liste von Strukturen, in denen Sie die erste Übereinstimmung auf beiden Seiten des Mappings finden können.
Denken Sie an die Problemdomäne und wählen Sie das am besten geeignete Werkzeug für den Job aus. Wenn es keinen gibt, dann erstelle ihn.