Frage

Mein Kollege ist neu in C # und wusste nicht, über den coalesce Betreiber. Also, ich sah ihn eine einzige Zeile Code wie folgt schreiben:

string foo = "" + str;

Die Idee ist, dass, wenn str null ist, würde dieser Ausdruck eine leere Zeichenfolge zurück. dass da dies natürlich neu geschrieben werden:

string foo = str ?? "";

Und ich fühle, dass mehr lesbar wäre. Aber ist es wirklich so große Sache? Sind die Lesbarkeit Vorteile genug vorschlagen zurück und machen diese Linien aussehen wie die zweite? Oder ist dies eines der Dinge, die ich lernen soll, gehen zu lassen (vorausgesetzt, dass meine Mitarbeiter auf dem besten Weg erzogen wird dies in Zukunft zu tun)?

Bearbeiten : Nur ein Hinweis, ich habe die Effizienz Kommentare zu schätzen wissen, aber das ist nicht wirklich in allen Situationen eingesetzt, in denen die Leistung entscheidend sein würde. Während also, dass info interessant ist, es ist nicht unbedingt das, was ich fühle, ist wichtig.

War es hilfreich?

Lösung

IMO, es ist viel besser, deutlich eine solche Logik zu definieren das heißt nicht String-Verkettung verwenden, um Null-String zu vermeiden und bedingte Anweisung verwenden oder ?? Operator.

In Bezug auf andere Kommentare:

  

gibt es auch einen Leistungsvorteil zu   Verwendung des null-Koaleszenz-Operator,   da keine Verkettung muss stattfinden   (Und daher keine zusätzliche Zeichenfolge   Instanz wird erstellt   unnötig)

Das stimmt nicht. C # Compiler kompiliert "" + Zeichenfolge2 zu dem 100% gleichen Code wie Zeichenfolge1 ?? "". Außerdem C # Compiler + Operator übersetzt String.Concat Methode aufrufen, die wiederum Argumente mit string.IsNullOrEmpty Funktion überprüft und nicht eine neue Zeichenfolge in diesem Fall nicht zugeordnet werden.

  

Auch ich würde die Verwendung empfehlen   String.Empty über „“, wie es sich um eine   konstant und erfordert nicht die   Schaffung eines neuen String

.NET Framework unterstützt Zeichenfolge Internierung so "" und string.Empty auf den gleichen Speicher Region

Andere Tipps

Ich glaube nicht, man ist nicht mehr lesbar ist als die andere persönlich. Ich ziehe es so aus:

string foo = str ?? "";

einfach, weil ich wirklich wie die ?? Operator.

Wenn Sie eine Marke Neuling sind, denke ich, dass dies ein wenig leichter sein würde, zu verstehen:

string foo = str == null ? "" : str;

oder

string foo = "";
if (str != null) foo = str;

Allerdings müssen Sie ein bisschen youself fragen: „Wie einfach wollen Sie wirklich bekommen?“

Während ich die zweite Zeile aus der technischen Perspektive bevorzugen, die erste Zeile ist eigentlich besser lesbar zu mir ...

Die zweite Zeile mir besser lesbar aussieht, macht deutlich die Absicht des rechten Seite Ausdrucks.

würde ich Ihr zweites Beispiel zum ersten bevorzugen, da es mehr proaktiv gegen str null sein und ist ausdrucksvoller ist. Auch ich würde die Verwendung von String.Empty über "" empfehlen, da es eine Konstante ist, und erfordert nicht die Schaffung eines neuen String (und ja, das ist eine extreme nitpick aber wichtig zu beachten).

würde ich den coalesce Operator oder foo = str == null ? "" : str; aus zwei Gründen:

  1. Das erste Beispiel hat nicht das gleiche Verhalten in anderen geschweiften Klammer Sprachen (insbesondere Java und JavaScript), wo ein NULL-Verweis auf eine leere Zeichenfolge ergibt eine Zeichenfolge anhängt den Text null enthält. Als Ergebnis erfordert das erste Beispiel viel mehr geistige Anstrengung, um sicherzustellen, dass sie in dem richtigen Verhalten in der Sprache führen wird verfaßt. Auch gegeben andere Hinweise es C # (wie der Klein Typ string), irgendetwas ist, dass der Entwickler zu verlangsamen und denken erfordert: „Was ist die Absicht dieses Code“ führt zu verlorener Produktivität. Es könnte auch Fehler einführen, wenn sie von Sprache zu Sprache zu bewegen.

  2. Das zweite Beispiel deutlicher drückt die Absicht des Codes, die in der ursprünglichen Frage, wie beschrieben ist:

    when str is null set foo to an empty string

    Im Gegensatz zu dem ersten Beispiel, das als gelesen werden kann:

    set foo to an empty string with str appended (which may have the side effect of setting foo to an empty string when str is null)

Als Programmierer sollten wir wahrscheinlich auszudrücken versuchen, die Absicht unseres Codes, anstatt sich auf Nebenwirkungen von anderen Operationen uns die Ergebnisse, die wir wollen.

Hier ist ein Artikel über String.Empty vs ""

http://blogs.msdn.com/brada /archive/2003/04/22/49997.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top