为何数组首元素为null时string.Join()会返回空字符串?
为什么数组首元素为null时
string.Join()会生成以分隔符开头的结果? 嘿,这个问题其实是因为string.Join的核心行为规则导致的,我来给你拆解清楚:
首先明确string.Join的关键处理逻辑
- 当遇到数组中的
null元素时,string.Join会自动将其替换为空字符串"",而不是直接跳过这个元素。 - 它会严格按照数组的元素顺序,把每个处理后的元素(包括替换后的空字符串)用指定分隔符串联起来,不会擅自过滤任何元素——不管是开头、中间还是结尾的
null/空字符串。
对应你的测试用例来分析
先看符合预期的
values0:object[] values0 = { "foo", 3, null }; var text0 = string.Join(", ", values0);第三个元素
null被替换成空字符串,拼接过程是:"foo" + ", " + "3" + ", " + "",最终得到"foo, 3, ",和你的断言一致。再看你疑问的
values1:object[] values1 = { null, "foo", 3, null }; var text1 = string.Join(", ", values1);第一个元素
null被替换成空字符串,拼接过程变成:"" + ", " + "foo" + ", " + "3" + ", " + "",最终结果就是", foo, 3, "。所以你把断言改成AssertX.AreEqual(", foo, 3, ", text1);就能通过测试了。
额外补充:如果想过滤null元素怎么办?
如果你希望跳过数组中的null元素,不要让它们变成空字符串参与拼接,可以先对数组做过滤处理,比如用LINQ:
var filteredValues = values1.Where(item => item != null); var text1 = string.Join(", ", filteredValues); // 此时text1会是"foo, 3"
内容的提问来源于stack exchange,提问作者dthal
相关产品推荐
相关产品推荐

