C# 6.0 Bearbeiten:
Mit C# 6.0 können wir jetzt eine prägnante, castfreie Version der Ursprungsmethode haben:
string s = myObj?.ToString() ?? "";
Oder sogar mit Interpolation:
string s = $"{myObj}";
Ursprüngliche Antwort:
string s = (myObj ?? String.Empty).ToString();
oder
string s = (myObjc ?? "").ToString()
um noch prägnanter zu sein.
Leider, wie bereits erwähnt wurde, benötigen Sie oft auf beiden Seiten einen Cast, damit dies auch mit Nicht-String- oder Object-Typen funktioniert:
string s = (myObjc ?? (Object)"").ToString()
string s = ((Object)myObjc ?? "").ToString()
Daher ist, obwohl es elegant erscheinen mag, der Cast fast immer erforderlich und ist in der Praxis nicht so prägnant.
Wie an anderer Stelle vorgeschlagen, empfehle ich möglicherweise die Verwendung einer Erweiterungsmethode, um dies sauberer zu gestalten:
public static string ToStringNullSafe(this object value)
{
return (value ?? string.Empty).ToString();
}
3 Stimmen
Ich sehe nichts falsch am ersten. Wenn du den zweiten als Hack betrachtest, ist es am besten, einfach eine Hilfsfunktion zu schreiben, die die Nullprüfung durchführt.
0 Stimmen
Bitte sei genauer mit deiner Frage.
3 Stimmen
String.Format("{0}", myObj) akzeptiert Nullwerte.
3 Stimmen
Mit C# 6.0 können wir nun Null-Bedingungsoperatoren verwenden, wie z.B. theText?.ToString() oder theText?.Trim()
2 Stimmen
Laut dieser Antwort macht
Convert.ToString()
genau das, was du als Erstes geschrieben hast.0 Stimmen
Für die Vervollständigung würde ich darauf hinweisen, dass die Frage und Antworten nur auf Referenztypen verweisen, aber nicht auf "einfache" Nullable - was eine Struktur ist, und Methoden können auf leeren Strukturen problemlos aufgerufen werden. Diese 2 anderen Fragen sind verwandt: 1 & 2.