string.Split()的未记载的重载?

时间:2010-05-25 16:45:36

标签: .net visual-studio intellisense

根据Intellisense和MSDN doc on string.Split,string.Split没有无参数重载。但如果我输入

string[] foo = bar.Split();

它编译。它有效。我已经在Visual Studio 2008和2010中验证了这一点。在这两种情况下,intellisense都没有显示无参数过载。

这有什么理由吗? MSDN / Intellisense文档中是否还有其他缺失的重载?通常浏览intellisense中的重载是我如何最好地确定使用哪个重载。我不愿意在整个.Net框架中错过其他可用选项。

编辑:如上所示,它在空格上分裂。

6 个答案:

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

params (C# reference)

您可以发送以逗号分隔的参数声明中指定类型的参数列表,或指定类型的参数数组。 您也可以不发送任何参数

答案 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或更多