测试NULL并在需要时返回一个字符串 - 什么是pro/con

Rob*_*ean 2 c# string null coalesce

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

对于以下示例:

  • 类: Astronaut
  • 变量类型Astronaut:person

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

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

我对这些的看法是

  1. 非常冗长,我不需要那种冗长程度.
  2. 比1好多了,但ToString感觉很难看,还担心ToString代码中的异常.
  3. 这似乎很受欢迎(这里这里),但我不确定它会起作用.编译器是否会抱怨string&Astronauttype不是同一类型,因此不能用于coalese.
  4. 这是我现在最开心的那个,但它意味着一个盒子,ToString应该person是null.

综上所述:

  • 任何与上述任何人的关系?
  • 你能想到的任何选择?

Che*_*hen 6

我更喜欢扩展方法:

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();
}
Run Code Online (Sandbox Code Playgroud)

所以对你的问题:

string result = person.SafeToString("Unknown Astronaut");
Run Code Online (Sandbox Code Playgroud)