当我在看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);
}
}
...
}
这里,第二个 if 语句对我来说似乎是多余的。我想如果 values[index] != null
是 true 那么 values[index] 怎么可能.ToString() == null
true ?据我所知,ToString
总是必须返回一些东西,对吗?即使该类型没有重写 ToString
方法,它也应该返回类型的完全限定名称( namespace + 类名称)。所以当我在 .NET Framework 源代码中看到它时,我想也许是有原因的,但我遗漏了一些东西。如果有原因,那是什么?
最佳答案
从技术上讲,这并不多余,因为对象的 ToString
实现有可能返回 null
。当然,这并不是真正有用,自定义类型不应该那样做。
实际上,在您的情况下,检查是多余的,因为当 Append
的参数为 null
时,StringBuilder
没问题。然后它将不附加任何内容:
StringBuilder sb = new StringBuilder("A");
sb.Append((string) null);
sb.Append("B");
Console.WriteLine(sb.ToString() == "AB"); // true
关于c# - 这个 if 语句是否多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21149987/