当我在查看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是正常时,参数Append是null.然后它只会附加任何东西:
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)
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |