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