.net – 为什么string.Join(string,object [])特别?
我看着以下表达式:
string.Join(",",new object[] { null,"StackOverflow" })
string.Join(",new string[] { null,new object[] { string.Empty,new string[] { string.Empty,"StackOverflow" })
我原以为他们会返回相同的值: ,StackOverflow 但是,第一个表达式实际上返回string.Empty.这is actually defined behavior:
有谁知道这种不一致背后的原因? 解决方法在您最喜欢的反编译器中,您可以看到该方法的代码是public static string Join(string separator,params object[] values)
{
if (values == null)
throw new ArgumentNullException("values");
if (values.Length == 0 || values[0] == null)
return string.Empty;
if (separator == null)
separator = string.Empty;
StringBuilder sb = StringBuilderCache.Acquire(16);
string str1 = values[0].ToString();
if (str1 != null)
sb.Append(str1);
for (int index = 1; index < values.Length; ++index)
{
sb.Append(separator);
if (values[index] != null)
{
string str2 = values[index].ToString();
if (str2 != null)
sb.Append(str2);
}
}
return StringBuilderCache.GetStringAndRelease(sb);
}
负责特殊行为的部分是 if (values.Length == 0 || values[0] == null)
return string.Empty;
但我们可以在下面看到几行 string str1 = values[0].ToString();
if (str1 != null)
sb.Append(str1);
返回值[0] == null但是处理值[0] .ToString()== null似乎很奇怪.结合MSDN上的措辞(“问题”,“解决方法”),这个重载相对较新的事实(.NET 4.0)以及其他Joins有一个不同的实现接受null作为第一个元素的事实,它看起来就像我的一个错误,而不是一个真正意图的例外. 当然,这只是我的解释,而不是一个明确的答案…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
