Недокументированная перегрузка строки. Split ()? - PullRequest
8 голосов
/ 25 мая 2010

Согласно обоим документам Intellisense и MSDN для строки. Разделение перегрузки строки без параметров отсутствуют. И все же, если я наберу

string[] foo = bar.Split();

Компилируется. И это работает. Я проверял это как в Visual Studio 2008, так и в 2010 году. В обоих случаях intellisense не показывает перегрузку без параметров.

Есть ли причина для этого? Есть ли другие отсутствующие перегрузки из документов MSDN / Intellisense? Обычно, просматривая перегрузки в intellisense, я лучше определяю, какую перегрузку использовать. Я бы не хотел думать, что мне не хватает других доступных опций в .Net Framework.

РЕДАКТИРОВАТЬ: как показано выше, он разделяется на пробелы.

Ответы [ 6 ]

16 голосов
/ 25 мая 2010

Это потому, что Split имеет перегрузку params. Предоставление без параметров равнозначно предоставлению пустого массива. Другими словами, вы вызываете эту перегрузку .

"some text".Split();

Так же, как:

"some text".Split(new char[0]);

Вот документация по ключевому слову params . Как вы, вероятно, знаете, он используется для присвоения методу переменного числа параметров. Это число может быть ноль.

8 голосов
/ 25 мая 2010

Могу поспорить, что она соответствует этой String.Split перегрузке:

public string[] Split(params char[] separator)
{
    return this.Split(separator, 0x7fffffff, StringSplitOptions.None);
}

0 аргументов приемлемо для этой функции. При отсутствии разделителей по умолчанию используется пробел .

5 голосов
/ 25 мая 2010

На самом деле вы звоните здесь: string.Split (params char [] separator)

params (C # ссылка)

Вы можете отправить разделенный запятыми список аргументов типа, указанного в объявлении параметра, или массив аргументов указанного типа. Вы также не можете отправлять аргументы .

3 голосов
/ 25 мая 2010

Это связано со слабостью выставления параметров как 'params array []'. Посмотрите на подпись следующего метода, как описано в MSDN, так что вы, очевидно, передаете пустой массив.

public string[] Split(params char[] separator)
2 голосов
/ 25 мая 2010

String.Split() имеет ряд перегрузок; вы правы в том, что ни одна из этих перегрузок не имеет параметров, однако одна из них является ненормальной: String.Split(params char[]). Часть переменной длины в списке аргументов может быть любым числом аргументов, включая ноль - это перегрузка, которую вы здесь вызываете.

1 голос
/ 25 мая 2010
public string[] Split(params char[] separator)

params равно 0 или больше

...