根据Intellisense和MSDN doc on string.Split,string.Split没有无参数重载。但如果我输入
string[] foo = bar.Split();
它编译。它有效。我已经在Visual Studio 2008和2010中验证了这一点。在这两种情况下,intellisense都没有显示无参数过载。
这有什么理由吗? MSDN / Intellisense文档中是否还有其他缺失的重载?通常浏览intellisense中的重载是我如何最好地确定使用哪个重载。我不愿意在整个.Net框架中错过其他可用选项。
编辑:如上所示,它在空格上分裂。
答案 0 :(得分:16)
这是因为斯普利特有一个params超载。不提供参数与给出空数组相同。换句话说,您正在呼叫this overload。
"some text".Split();
与:
相同"some text".Split(new char[0]);
这是the documentation on the params keyword。您可能知道,它用于为方法提供可变数量的参数。这个数字可能为零。
答案 1 :(得分:8)
我敢打赌它匹配此String.Split
重载:
public string[] Split(params char[] separator)
{
return this.Split(separator, 0x7fffffff, StringSplitOptions.None);
}
此参数可接受0个参数。没有分隔符,it defaults to white space。
答案 2 :(得分:5)
实际上你在这里调用的是 string.Split(params char [] separator)
您可以发送以逗号分隔的参数声明中指定类型的参数列表,或指定类型的参数数组。 您也可以不发送任何参数。
答案 3 :(得分:3)
它与将参数暴露为'params array []'的弱点有关。请参阅MSDN中记录的以下方法的签名,因此显然您传入的是一个空数组。
public string[] Split(params char[] separator)
答案 4 :(得分:2)
String.Split()
有许多重载;你是对的,这些重载都不是无参数的,但是,其中一个是varadic:String.Split(params char[])
。参数列表的可变长度部分可以是任意数量的参数,包括零 - 这是您在此处调用的重载。
答案 5 :(得分:1)
public string[] Split(params char[] separator)
params为0或更多