字符串拼接的奇怪行为

3

我正在尝试使用以下参数调用 string.Join 方法(第一个参数是分隔符):

string.Join(";", null, "string", 0); //returns empty string ???.
string.Join(";", null, null, 0); //returns empty string ???.
string.Join(";", null, null, null); //returns ";;;" - Good
string.Join(";", 0, 0, 0); //returns "0;0;0" - Good
string.Join(";", 0, null, 0); // "0;;0" - Good
string.Join(";", null, 0, null); // empty

请问有人能解释一下为什么它会产生这种行为吗?在这种情况下如何依赖于string.Join方法?

2个回答

5

下面的调用选择了 String.Join(String, Object[]) 重载:

string.Join(";", null, "string", 0); // empty string
string.Join(";", null, null, 0); // empty string
string.Join(";", 0, 0, 0); // "0;0;0"
string.Join(";", 0, null, 0); // "0;;0"
string.Join(";", null, 0, null); // empty string

根据文档 (参见调用方注意事项): 如果values的第一个元素为null,则Join(String, Object[])方法不会连接values中的元素,而是返回String.Empty。这个调用使用不同实现技巧的String.Join(String, String[])重载。
string.Join(";", null, null, null); // ";;;"

2
啊,我在提问之前检查了错误的重载……不管怎样,他们为什么要这样设计呢? - Shimmy Weitzhandler

2

ReferenceSourceJoin(String separator, params Object[] values)实现

if (values.Length == 0 || values[0] == null)
    return String.Empty;

我想这就是你的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接