Каков правильный синтаксис для этого:
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 удаляет записи, которые были бы только символом пробела ...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Этот работает.
Что вам здесь не хватает, так это того, что .Reverse () - это метод void. Невозможно присвоить результат .Reverse () переменной. Однако вы можете изменить порядок использования Enumerable.Reverse () и получить результат
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
Разница в том, что Enumerable.Reverse () возвращает IEnumerable <T> вместо void 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());
Выход
Теперь вы, очевидно, можете изменить порядок, как предлагали другие.