Nullable ToString ()
Sehe ich überall Konstruktionen wie:
int? myVar = null;
string test = myVar.HasValue ? myVar.Value.ToString() : string.Empty;
Warum nicht einfach:
string test = myVar.ToString();
Ist das nicht genau das gleiche ?
Zumindest Reflektor sagt, dass:
public override string ToString()
{
if (!this.HasValue)
{
return "";
}
return this.value.ToString();
}
So, ist das richtig (die kürzere version) oder bin ich etwas fehlt?
InformationsquelleAutor der Frage IamDeveloper | 2010-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie sind ganz richtig. Auch in diese Fragedie erste Lösung wird vorgeschlagen, während eigentlich niemand bemerkt
ToString()
gibt bereits die richtige Antwort.Vielleicht das argument für die Ausführlicher Lösung ist die Lesbarkeit: Beim Aufruf der
ToString()
auf etwas, das soll zunull
Sie in der Regel erwarten eineNullReferenceException
obwohl es hier nicht geworfen.InformationsquelleAutor der Antwort Tomas Vana
Ich denke, dass viele Menschen haben solche Prüfungen, da es sich nicht um ein natürliches Verhalten von einem Objekt, das null Wert.
InformationsquelleAutor der Antwort Andrew Bezzub
Nein, du hast Recht, die kürzere version ist die gleiche wie das, was andere Leute getan haben, in dieser Hinsicht. Die anderen konstruieren, ich Neige dazu, eine Menge verwenden, statt der ternären mit nullables ist die null-coalescing-operator. das schützt Sie auch vor Nullen. Für ToString() ist es nicht notwendig (wie gesagt), aber für die default-int Werte (zum Beispiel) funktioniert es gut, z.B.:
mit der Sie alle integer-Operationen auf Seite w/o erste explizit null-Prüfung und Berufung für den Wert in currentPage (wo currentPage ist ein int? vielleicht übergeben param)
InformationsquelleAutor der Antwort Paul
Ich weiß, lange nachdem es relevant war, aber ... ich vermute, es ist, weil für nullable-Typen wie int? die .ToString () - Methode nicht erlauben die Verwendung von format-strings. Sehen Wie kann ich formatieren Sie eine nullable DateTime mit ToString()? . Vielleicht in der original-code, gab es eine format-string .ToString(), oder vielleicht der Programmierer vergessen .ToString() ohne den format-string wurde noch auf null festlegbaren Typen.
InformationsquelleAutor der Antwort outis nihil
sein mag, es ist einfach zu Folgen Muster? oder Sie wissen nicht das backend. Sie sind richtige code ist genau das gleiche. Sie können sogar tun:
InformationsquelleAutor der Antwort Andrey