.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作为第一个元素的事实,它看起来就像我的一个错误,而不是一个真正意图的例外. 当然,这只是我的解释,而不是一个明确的答案…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |