Да, здесь нужен еще один ответ!
Все решения на данный момент направлены на довольно ограниченную область канонического ввода , а именно: одиночный символ пробела между элементами (хотя наконечник шляпы @cherno для по крайней мере упоминания проблемы).
Но я утверждаю, что во всех, кроме самых неясных сценариев, разделение всех этих должно дать идентичные результаты:
string myStrA = "The quick brown fox jumps over the lazy dog";
string myStrB = "The quick brown fox jumps over the lazy dog";
string myStrC = "The quick brown fox jumps over the lazy dog";
string myStrD = " The quick brown fox jumps over the lazy dog";
String.Split
(в любом из вариантов, показанных в других ответах здесь) просто не работает должным образом, если вы не добавите параметр RemoveEmptyEntries
к одному из следующих вариантов:
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
Как показано на рисунке, если вы не укажете эту опцию, вы получите четыре разных результата (обозначенные A, B, C и D) по сравнению с одним результатом для всех четырех входов при использовании RemoveEmptyEntries
:

Конечно, если вам не нравится использование опций, просто используйте альтернативу регулярному выражению: -)
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)