Преобразовать список (объекта) в список (строки) - PullRequest
66 голосов
/ 26 января 2009

Есть ли способ конвертировать List(of Object) в List(of String) в c # или vb.net без перебора всех элементов? (За кадром итерация в порядке - я просто хочу краткий код)

Обновление: Лучший способ, вероятно, просто сделать новый выбор

myList.Select(function(i) i.ToString()).ToList();

или

myList.Select(i => i.ToString()).ToList();

Ответы [ 6 ]

73 голосов
/ 26 января 2009

Невозможно без итерации для создания нового списка. Вы можете обернуть список в контейнер, который реализует IList.

Вы можете использовать LINQ, чтобы получить лениво оцененную версию IEnumerable<string> из списка объектов, подобного этому:

var stringList = myList.OfType<string>();
32 голосов
/ 14 ноября 2012

Это работает для всех типов.

List<object> objects = new List<object>();
List<string> strings = objects.Select(s => (string)s).ToList();
22 голосов
/ 26 января 2009

Если вы хотите больше контроля над тем, как происходит конвертация, вы можете использовать ConvertAll:

var stringList = myList.ConvertAll(obj => obj.SomeToStringMethod());
8 голосов
/ 26 января 2009

Ты имеешь в виду что-то подобное?

List<object> objects = new List<object>();
var strings = (from o in objects
              select o.ToString()).ToList();
3 голосов
/ 26 января 2009

Нет - если вы хотите преобразовать ВСЕ элементы списка, вам придется прикоснуться к ВСЕМ элементам этого списка тем или иным способом.

Вы можете указать / написать итерацию по-разному (foreach () ...... или .ConvertAll () или что-то еще), но в конце концов, так или иначе, некоторый код будет повторяться каждый элемент и преобразовать его.

Марк

1 голос
/ 26 января 2009

Можете ли вы выполнить преобразование строк во время создания List (объекта)? Это был бы единственный способ избежать перечисления всего списка после создания списка (объекта).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...