2014-07-15 3 views
-1

Есть ли способ, чтобы преобразовать общий список в список ... Я пытался, как это, но я получаю исключение .... Пожалуйста, помогитепреобразовать общий список в список строк

Class Demo 
{ 
    public list<string> convert() 
    { 
     List<example> eg = new List<example>(); 
     eg.Add(new example{"Hello"}); 
     eg.Add(new example{"World"}); 
     List<string> str = new List<string>(); 
     str = eg.Cast<string>().ToList(); //Returns an System.InvalidCastException. 
          // Is there a way to cast a generic list to string list.. 
     return str; 
    } 
} 

Class example 
{ 
    public string name{ get; set; } 
} 
+7

Ваш код имеет все виды проблем. Это даже не компилируется, поэтому вы не получите исключения. Пожалуйста, включите короткую, но * полную * программу, демонстрирующую проблему. Псевдокода недостаточно. –

+0

Создание нового списка заранее с помощью 'List str = new Список ();' избыточно, потому что '.ToList()' создает новый список и не заполняет существующий список. –

ответ

2

Что вам нужно, это проекция, а не бросок. Это потому, что ваш класс example не может быть отличен до string. В LINQ, проекция осуществляется методом Select:

return eg.Select(x => x.name).ToList(); 
+0

Я думаю, что он вернет только «имя» в списке ... Что, если мне нужна моя полная модель? –

1

Любой List<T> представляет собой общий список; то, что вы хотите сделать, это извлечь свойство из списка объектов, а не выполнить бросок. Это может быть сделано с помощью LINQ:

str = eg.Select(x => x.name).ToList(); 
1

Или старый добрый путь (.NET 2.0):

foreach (var example in eg) 
{ 
    str.Add(example.name); 
} 
Смежные вопросы