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

标签 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);
    }
  }
  ...
 }

这里,第二个 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/

相关文章:

c# - 为什么要序列化整个 HttpResponseMessage?

string - 使用 SwiftUI 在 UserDefaults 中保存来自 TextField 的字符串

java - 拆分和解析公式字符串

c++ - string 自动将 const char* 转换为 std::string

string - Delphi 汇编函数返回长字符串

C# - 使字符串以不同的方式打印到控制台,但以其原始形式在其他地方使用

c# - 引发 Task.ThrowIfExceptional 的异常是什么?

c# - ASP.NET 脚本 "scheduling"问题

java - 无法在 Android 上的 Xamarin 中使用 PayPal SDK 找到明确的 Activity 类付款 Activity

c - 如何使用 printf 打印字符串而不打印尾随换行符