2011-01-15 13 views

Odpowiedz

99

Nie trzeba konwertować. List<T> implementuje interfejs IEnumerable<T>, więc jest już przeliczalny.

To oznacza, że ​​można perfekcyjnie posiadać:

public IEnumerable<Book> GetBooks() 
{ 
    List<Book> books = FetchEmFromSomewhere();  
    return books; 
} 

, jak:

public void ProcessBooks(IEnumerable<Book> books) 
{ 
    // do something with those books 
} 

które mogą być powoływane:

List<Book> books = FetchEmFromSomewhere();  
ProcessBooks(books); 
3
IEnumerable<Book> _Book_IE; 
List<Book> _Book_List; 

Jeśli jest to ogólny wariant:

_Book_IE = _Book_List; 

Jeśli chcesz przekonwertować do non-generic jednym:

IEnumerable ie = (IEnumerable)_Book_List; 
+5

Nie potrzebujesz tutaj obsady. –

+2

Robisz, jeśli chcesz zastosować określone metody z interfejsu niebędącego generycznym, ponieważ niektóre z nich są jawnie zaimplementowane lub czy jestem tutaj na niewłaściwej ścieżce? – Femaref

11

O ile wiem List<T> realizuje IEnumerable<T>. Oznacza to, że nie musisz niczego konwertować ani rzucać.

+1

To zależy. Jeśli spróbujesz ustawić "IEnumerable >" na "IEnumerable >", to spowoduje to błąd kompilatora, ponieważ drugi nie dziedziczy po pierwszym. – Emaborsa

12

Dlaczego nie korzystać z jednego wykładziny ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>; 
23

Można użyć metody rozszerzenie AsEnumerable w montażu System.Core i System.Linq nazw:

List<Book> list = new List<Book>(); 
return list.AsEnumerable(); 

będzie to, jak powiedział na this MSDN link zmienić typ listy podczas kompilacji. Daje to korzyści, aby wyliczyć tylko potrzebną kolekcję (patrz przykład MSDN).

+0

Wygląda prosto, ale jest najprostszym sposobem na konwersję. Dziękuję Ci –

1

Trzeba

using System.Linq; 

używać IEnumerable opcje w swojej List.

Powiązane problemy