Каков правильный синтаксис для этого:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Что я испортил? Что означает TSource?
Каков правильный синтаксис для этого:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Что я испортил? Что означает TSource?
Проблема заключается в том, что вы вызываете 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();
Это позволяет избежать создания каких-либо буферов несоответствующего размера - за счет принятия четырех операторов, в которых он будет делать... Как всегда, взвешивайте читаемость от производительности в реальном использовании.
Я понимаю, что этот вопрос довольно старый, но у меня была аналогичная проблема, за исключением того, что в моей строке были пробелы. Для тех, кто должен знать, как отделить строку больше, чем просто запятыми:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions удаляет записи, которые будут только в пространстве char...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Это работает.
Попробуйте следующее:
List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();
Что вам не хватает в этом .Reverse() - это метод void. Невозможно присвоить переменную переменную .Reverse(). Однако вы можете изменить порядок использования Enumerable.Reverse() и получить результат
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
Разница заключается в том, что Enumerable.Reverse() возвращает IEnumerable <T> вместо того, чтобы быть недействительным return
Если вы пытаетесь
следующее должно работать:
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());
Выход
Теперь вы можете, очевидно, изменить порядок, как предложили другие.