string.Join奇怪的行为

时间:2017-02-15 03:36:38

标签: c# .net string

我尝试使用以下参数调用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 个答案:

答案 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;

我认为这是你的答案。