2008-11-24 3 views

ответ

203

Проблема заключается в том, что вы вызываете List<T>.Reverse() который возвращает void.

Вы можете либо сделать:

List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>(); 
names.Reverse(); 

или:

IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>(); 

Последнее является более дорогостоящим, так как реверсивный произвольной IEnumerable<T> включает буферизацию все данные, а затем приносит все это - в то время как List<T> может сделать все обратное «на месте». (Разница в том, что это вызов метода Enumerable.Reverse<T>() расширения, вместо метода List<T>.Reverse() экземпляра.)

Более эффективная еще, вы можете использовать:

string[] namesArray = "Tom,Scott,Bob".Split(','); 
List<string> namesList = new List<string>(namesArray.Length); 
namesList.AddRange(namesArray); 
namesList.Reverse(); 

Это позволяет избежать создания каких-либо буферов несоответствующего размера - за счет принятия четырех заявлений, в которых каждый будет делать ... Как всегда, взвешивать читаемость с эффективностью в реальном прецеденте.

+21

skeet's beast! – flesh 2008-11-24 20:55:02

1

Попробуйте это:

List<string> names = new List<string>("Tom,Scott,Bob".Split(',')); 
names.Reverse(); 
+0

Я получаю сообщение об ошибке - Не могу неявно преобразовать тип 'void' в 'System.Collections.Generic.List BuddyJoe 2008-11-24 20:36:58

+1

Я просто попробовал, и он отлично работал – Yona 2008-11-25 00:24:31

3
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList(); 

Этот продукт работает.

1

Что вам здесь не хватает, что .Reverse() - это метод пустоты. Невозможно присвоить переменную переменную .Reverse(). Однако вы можете изменить порядок использования Enumerable.Reverse() и получить ваш результат

var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>() 

Разница заключается в том, что Enumerable.Reverse() возвращает IEnumerable <T> вместо того, чтобы быть недействительным возврат

7

Я понимаю, что этот вопрос довольно старый, но у меня была аналогичная проблема, за исключением того, что в моей строке были пробелы. Для тех, которые нужно знать, как отделить строки больше, чем просто запятые:

string str = "Tom, Scott, Bob"; 
    IList<string> names = str.Split(new string[] {","," "}, 
    StringSplitOptions.RemoveEmptyEntries); 

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

0

Если вы пытаетесь

  1. Использовать несколько разделителей
  2. Фильтр любые пустые строки
  3. дифферента ведущие/ведомые пробелы

должно работать:

string str = "Tom Cruise, Scott, ,Bob | at"; 
IEnumerable<string> names = str 
          .Split(new char[]{',', '|'}) 
          .Where(x=>x!=null && x.Trim().Length > 0) 
          .Select(x=>x.Trim()); 

Выход

  • Том
  • Круиз
  • Скотт
  • Боб
  • на

Теперь вы можете явно изменить порядок, как другие предложили.