Tak, tutaj potrzebna jest jeszcze jedna odpowiedź!
Wszystkie dotychczasowe rozwiązania dotyczą raczej ograniczonej dziedziny kanonicznych danych wejściowych , a mianowicie: pojedynczego spacji między elementami (choć czubek kapelusza na @cherno dla przynajmniej wzmianki o problemie). Ale twierdzę, że we wszystkich oprócz najbardziej niejasnych scenariuszy podzielenie wszystkich z nich powinno dać identyczne wyniki:
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(w dowolnym smaku pokazanym w innych odpowiedziach tutaj) po prostu nie działa dobrze, chyba że podasz RemoveEmptyEntriesopcję z jednym z poniższych:
myStr.Split(new char[0], StringSplitOptions.RemoveEmptyEntries)
myStr.Split(new char[] {' ','\t'}, StringSplitOptions.RemoveEmptyEntries)
Jak pokazuje ilustracja, pominięcie opcji daje cztery różne wyniki (oznaczone A, B, C i D) w porównaniu do pojedynczego wyniku ze wszystkich czterech danych wejściowych, gdy używasz RemoveEmptyEntries:

Oczywiście, jeśli nie lubisz korzystać z opcji, skorzystaj z alternatywy regularnej :-)
Regex.Split(myStr, @"\s+").Where(s => s != string.Empty)