这个if语句是否多余?

Sel*_*enç 10 c# string

当我在查看String.Join方法实现时,我看到了一个这样的for循环:

public static string Join(string separator, params object[] values)
{
  ...
  for (int index = 1; index < values.Length; ++index)
  {
    sb.Append(separator);
    if (values[index] != null) // first if statement
    {
      string str2 = values[index].ToString(); 
      if (str2 != null)  // second if statement
        sb.Append(str2);
    }
  }
  ...
 }
Run Code Online (Sandbox Code Playgroud)

在这里,第二个if语句对我来说似乎是多余的.我认为如果values[index] != null真的那么怎么可能是values[index].ToString() == null 真的?据我所知,ToString总是必须归还一些东西,对吧?即使类型没有覆盖ToString方法,它也应该返回Type的完全限定名称(Namespace + Class name).所以当我在.NET Framework源代码中看到它时,我想也许有一个原因,我错过了什么.如果有一个原因,这是什么?

pok*_*oke 16

从技术上讲,它并不是多余的,因为对象的ToString实现可能会返回null.当然,这不是很有用,自定义类型不应该这样做.

实际上你的情况然而,检查是多余的,因为StringBuilder是正常时,参数Appendnull.然后它只会附加任何东西:

StringBuilder sb = new StringBuilder("A");
sb.Append((string) null);
sb.Append("B");

Console.WriteLine(sb.ToString() == "AB"); // true
Run Code Online (Sandbox Code Playgroud)


Kev*_*lia 12

我想你可以覆盖ToString并返回null.

public override string ToString()
{
    return null;
}
Run Code Online (Sandbox Code Playgroud)