C# 6.0 Edit:
With C# 6.0 we can now have a succinct, cast-free version of the orignal method:
string s = myObj?.ToString() ?? "";
Or even using interpolation:
string s = $"{myObj}";
Original Answer:
string s = (myObj ?? String.Empty).ToString();
or
string s = (myObjc ?? "").ToString()
to be even more concise.
Unfortunately, as has been pointed out you'll often need a cast on either side to make this work with non String or Object types:
string s = (myObjc ?? (Object)"").ToString()
string s = ((Object)myObjc ?? "").ToString()
Therefore, while it maybe appears elegant, the cast is almost always necessary and is not that succinct in practice.
As suggested elsewhere, I recommend maybe using an extension method to make this cleaner:
public static string ToStringNullSafe(this object value)
{
return (value ?? string.Empty).ToString();
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…