string.Join奇怪的行为

Shi*_*mmy 3 .net c# 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
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么它这样做?如何依赖string.Join在这种情况下?

Rob*_*sen 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
Run Code Online (Sandbox Code Playgroud)

文档中(参见Notes to Callers):

如果的第一个元素为null,则该Join(String,?Object[]) 方法不会连接值中的元素,而是返回 String.Empty.

String.Join(String,?String[])为此调用选择了不共享相同实现怪癖的重载:

string.Join(";", null, null, null); // ";;;"
Run Code Online (Sandbox Code Playgroud)

  • 哎呀,在问我的问题之前,我检查了错误的超载......无论如何,他们为什么这么设计呢? (2认同)