我尝试使用以下参数调用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在这种情况下?
答案 0 :(得分: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
从documentation(参见 Notes to Callers ):
如果值的第一个元素是 null ,则
Join(String, Object[])
方法不会连接值中的元素,而是返回String.Empty
。
为此次调用选择了String.Join(String, String[])
重载,它不共享相同的实现怪癖:
string.Join(";", null, null, null); // ";;;"
答案 1 :(得分:2)
来自ReferenceSource Join(String separator, params Object[] values)
的实施
if (values.Length == 0 || values[0] == null)
return String.Empty;
我认为这是你的答案。