以下测试通过书面说明。为什么? (即,为什么数组中的前导空值会导致string.Join()返回空字符串?)
[TestMethod]
public void Test_string_Join()
{
object[] values0 = { "foo", 3, null };
var text0 = string.Join(", ", values0);
Console.WriteLine("text0 = " + text0);
AssertX.AreEqual("foo, 3, ", text0); // works as expected
object[] values1 = { null, "foo", 3, null };
var text1 = string.Join(", ", values1);
Console.WriteLine("text1 = " + text1);
AssertX.AreEqual("", text1); // does NOT work as expected, why empty?
}
答案 0 :(得分:1)
关于“数组”的问题是string.Join()
。事实证明,微软违反了最不惊讶的原则,而String.Join(String, **Object[]**)
的行为与String.Join(String, **String**[])
的行为无效。 object[]
超载有问题;字符串重载的行为与人们期望的一样。
我相信微软在提及“问题”并在object[]
重载文档(由@ user202729提供的链接)中提供“解决方法”时也会承认。
我没想到object[]
重载的文档与string[]
重载(我仔细阅读)不同。