2014-01-27 3 views
-4

Почему приведенный ниже код недействителен для разделения строк, чтобы найти количество слов? valueAsString - строка с допустимым значением;Разделительная строка с пробелом в качестве разделителя

valuesAsString.Split(" "); 

Код ниже работает отлично

valuesAsString.Split(' '); 
+0

Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Что значит «недействительно»?Вы имеете в виду ошибку компиляции? Какая ошибка? –

+0

Потому что такой перегрузки нет. Почему нет такой перегрузки? Угадайте, что только программисты, работающие в Microsoft, которые пишут фреймворк, могут сказать наверняка, иначе мы можем только догадываться. –

ответ

3

перегрузки для string.Split являются:

public string[] Split(params char[] separator) 
public string[] Split(params char[] separator, int count)  
public string[] Split(params char[] separator, StringSplitOptions options) 
public string[] Split(params char[] separator, int count, StringSplitOptions options) 
public string[] Split(string[] separator, StringSplitOptions options) 
public string[] Split(string[] separator, int count, StringSplitOptions options) 

так string.Split(char) работает, потому что спецификатор params позволяет компилятору обрабатывать один символ как массив с одним значением, поэтому выбирается первая перегрузка.

С

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

и

public string[] Split(string separator) 

не перегружает и не существует неявное преобразование из string к char[], пушка компилятор непосредственно связывать string.Split(string).

Некоторые альтернативы, которые будут работать:

valuesAsString.Split(new [] {" "}, StringSplitOptions.None); 
valuesAsString.Split(" ".ToCharArray()); 

или просто

valuesAsString.Split(); 

, так как компилятор обрабатывает отсутствие значений как пустой «массив» для параметра params, и в документации:

Если параметр разделителя равен нулю или не содержит символов, символ «белый пробел» rs считаются разделителями. Символы белого пространства определяются стандартом Unicode и возвращают true, если они передаются методу Char.IsWhiteSpace.

+0

+1 для 'ToCharArray()', хороший трюк! –

1

Split нужен символ в качестве разделителя. Когда вы используете двойные кавычки, вы отмечаете его как строку. Если вы используете одинарные кавычки, это символ.

0

Поскольку String.Split требует Char, а не строку. «» Означает Чару, в то время как «» обозначает строку

1

Поскольку Split метод с одним параметром ожидать параметр символа (или массив символов): смотрите here

+2

Не совсем, у него несколько перегрузок, включая массив строк. –

1

Вы ищете this перегружен версии Я думаю:

valuesAsString.Split(new [] { " " } ,StringSplitOptions.None); 
Смежные вопросы