gpt4 book ai didi

c# - 这个 if 语句是否多余?

转载 作者:可可西里 更新时间:2023-11-01 08:53:45 24 4
gpt4 key购买 nike

当我在看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] != nulltrue 那么 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com