以下のことを実行する簡単な方法はありますか?
String s = myObj == null ? "" : myObj.ToString();
次のことはできるとわかっていますが、実際にはハックだと考えています。
String s = "" + myObj;
Convert.ToString() にこれに対する適切なオーバーロードがあれば素晴らしいでしょう。
ベストアンサー1
C# 6.0 編集:
C# 6.0 では、元のメソッドの簡潔でキャストフリーなバージョンを使用できるようになりました。
string s = myObj?.ToString() ?? "";
あるいは補間を使うこともできます:
string s = $"{myObj}";
元の回答:
string s = (myObj ?? String.Empty).ToString();
または
string s = (myObjc ?? "").ToString()
さらに簡潔にします。
残念ながら、指摘されているように、これを String または Object 以外の型で動作させるには、どちらかの側でキャストが必要になることがよくあります。
string s = (myObjc ?? (Object)"").ToString()
string s = ((Object)myObjc ?? "").ToString()
したがって、エレガントに見えるかもしれませんが、キャストはほとんどの場合必要であり、実際にはそれほど簡潔ではありません。
他の場所で提案されているように、これをよりクリーンにするために拡張メソッドを使用することをお勧めします。
public static string ToStringNullSafe(this object value)
{
return (value ?? string.Empty).ToString();
}