这是Split方法的未记录的覆盖吗?

时间:2011-06-23 03:37:00

标签: c#

我刚刚发现这个代码不仅编译好了,而且似乎在任何空格上拆分字符串。

List<string> TableNames = Tables.Split().ToList();

然而它并没有在intellisense中显示,而且它不在MSDN page上。

这只是一个未记录的覆盖吗?因此,使用它是否危险?

2 个答案:

答案 0 :(得分:10)

这不是一个覆盖。在这种情况下,编译器会使用空参数将Split()转换为Split(char[])

is defined拆分为

public string[] Split(
    params char[] separator
)

params允许您指定可变数量的参数,包括根本没有参数。如果没有提供参数(如您的示例中所示),则separator数组将为空。

从上面链接的MSDN页面:

  

如果separator参数为null或不包含字符,则假定空格字符为分隔符。

这就是为什么你看到字符串在空格上分割的原因。这只是默认行为而不是未记录的功能,因此您可以自由使用它而不必担心会出现异常的副作用。好吧,除非默认行为在未来版本的.NET中发生变化,但这对我来说似乎不太可能,因为空格是一个合理的默认值。

答案 1 :(得分:3)

来自remarks to String.Split

  

如果separator参数为Nothing   或者不包含任何字符,空格   字符被假定为   分隔符。空白字符是   由Unicode标准定义   如果它们被传递给,则返回true   Char.IsWhiteSpace方法。

我个人称之为记录在案的行为。 :)