Недокументированная перегрузка строки. Разделение ()?

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

string[] foo = bar.Split();

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

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

Править: как показано выше, это разделяет на пробеле.

8
задан Sathyajith Bhat 19 June 2012 в 16:24
поделиться

6 ответов

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

"some text".Split();

Это то же самое, что:

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

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

16
ответ дан 5 December 2019 в 05:02
поделиться

Бьюсь об заклад, это соответствует этой перегрузке String.Split :

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

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

8
ответ дан 5 December 2019 в 05:02
поделиться

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

params (справочник по C #)

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

5
ответ дан 5 December 2019 в 05:02
поделиться

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

public string[] Split(params char[] separator)
3
ответ дан 5 December 2019 в 05:02
поделиться

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

2
ответ дан 5 December 2019 в 05:02
поделиться
public string[] Split(params char[] separator)

params 0 или больше

1
ответ дан 5 December 2019 в 05:02
поделиться