Auch wenn dies eine alte Frage ist und der Fragesteller nach C# gefragt hat, möchte ich eine VB.Net-Lösung für diejenigen teilen, die lieber mit VB.Net als mit C# arbeiten:
Dim myObj As Object = Nothing
Dim s As String = If(myObj, "").ToString()
myObj = 42
s = If(myObj, "").ToString()
Leider erlaubt VB.Net den ?-Operator nach einer Variablen nicht, sodass myObj?.ToString nicht gültig ist (zumindest nicht in .Net 4.5, das ich zum Testen der Lösung verwendet habe). Stattdessen verwende ich das If, um im Falle von myObj Nothing einen leeren String zurückzugeben. Daher gibt der erste ToString-Aufruf einen leeren String zurück, während der zweite (wo myObj nicht Nothing ist) "42" zurückgibt.
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.