我有一个简单的类,该类实现了ToString,对此内容感到满意。我试图通过查看各种选项是否存在赞成/反对来决定(最)正确的方法。

对于以下示例:


类别:Astronaut
类型为Astronaut的变量:person


我在这里只是雪球的选择:


string result = person == null ? "Unknown Astronaut" : person.ToString();
string result = person.ToString() ?? "Unknown Astronaut";
string result = (person ?? "Unknown Astronaut").ToString();
string result = person ?? (object)"Unknown Astronaut";


我对这些的看法是


非常冗长,我不需要那么详细。
比1好得多,但是ToString感觉很丑,而且担心该ToString代码中的异常。
这似乎很流行(herehere),但是我不确定它是否可以正常工作。编译器不会抱怨stringAstronaut类型不是同一类型,因此不能在合并中使用。
这是我现在最高兴的那个,但这意味着一个框&ToString应该person为空。


综上所述:


以上任何优点/缺点吗?
您能想到的任何选择吗?

最佳答案

我更喜欢一种扩展方法:

public static string SafeToString(this Object obj)
{
   return obj.SafeToString(string.Empty);
}

public static string SafeToString(this Object obj, string defaultString)
{
   return obj == null ? defaultString : obj.ToString();
}


所以对你的问题:

string result = person.SafeToString("Unknown Astronaut");

10-08 02:36