Convertir de la liste au format IEnumerable


97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Comment dois-je faire pour convertir _Book_Listen IEnumerableformat?


58
Votre convention de dénomination est malheureusement unique.
Kirk Woll

6
Au moins il a une convention, hein?
Femaref

1
Pour les gens qui se demandent pourquoi le commentaire de Kirk a autant de "ups", c'est parce que vous ne pouvez pas simplement nommer votre variable comme vous le souhaitez! il existe des conventions pour cela, et il est fortement recommandé de les suivre, afin que votre code soit clair et compréhensible, cela aidera les personnes qui essaient de vous aider dans des endroits comme Stack-overflow ou GitHub! pour plus d'informations, lisez le livre: Clean Code de Robert C. Martin.
KADEM Mohammed

1
... et comment aborder une convention de nommage sans être la proie de l'anti-patron de nommage des Schtroumpfs? devcards.io/smurf-naming-convention En général, un espace de noms peut fournir une spécificité si nécessaire.
Meadock

Réponses:


150

Vous n'avez pas besoin de le convertir. List<T>implémente l' IEnumerable<T>interface afin qu'elle soit déjà un énumérable.

Cela signifie qu'il est parfaitement bien d'avoir ce qui suit:

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

aussi bien que:

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

qui pourrait être invoqué:

List<Book> books = FetchEmFromSomewhere();    
ProcessBooks(books);

63

Vous pouvez utiliser la méthode d'extension AsEnumerable dans les espaces de noms Assembly System.Core et System.Linq:

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

Ceci, comme indiqué sur ce lien MSDN, changera le type de la liste au moment de la compilation. Cela vous donnera également les avantages d'énumérer uniquement votre collection dont nous avions besoin (voir l'exemple MSDN pour cela).


Cela a l'air simple mais constitue le moyen le plus simple de convertir. Merci
Ishwor Khanal

1
Si vous n'êtes pas censé ajouter quelque chose à la collection, vous devez utiliser / retourner IEnumerable.
AZ_

15

Pourquoi ne pas utiliser une doublure simple ...

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

11

Autant que je sache, des List<T>outils IEnumerable<T>. Cela signifie que vous n'avez rien à convertir ou à lancer.


4
Ça dépend. Si vous essayez de définir a IEnumerable<IList<obj>>sur an, IEnumerable<IEnumerable<obj>>cela donne une erreur de compilation car le second n'hérite pas du premier.
Emaborsa

4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

Si c'est la variante générique:

_Book_IE = _Book_List;

Si vous souhaitez effectuer une conversion vers une version non générique:

IEnumerable ie = (IEnumerable)_Book_List;

5
Vous n'avez pas besoin du casting ici.
Jon Skeet

2
Vous le faites si vous voulez les méthodes spécifiques de l'interface non générique, car certaines d'entre elles sont explicitement implémentées, ou suis-je sur la mauvaise voie ici?
Femaref

0

Tu dois

using System.Linq;

pour utiliser les IEnumerableoptions de votre List.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.