128
IEnumerable<Book> _Book_IE
List<Book> _Book_List

How shall I do in order to convert _Book_List into IEnumerable format?

HelloWorld1
  • 13,688
  • 28
  • 82
  • 145
  • 7
    At least he has a convention, eh? – Femaref Jan 15 '11 at 16:14
  • 2
    For people wondering why Kirk's comment have so many "ups", it's because you can't just name your variable the way you want ! there are conventions for that, and it is highly recommended that you follow them, so that your code can be clear and understandable, this will help the people trying to help you in places like Stack-overflow or GitHub! for further information read the book : **Clean Code** by Robert C. Martin. – KADEM Mohammed May 09 '20 at 07:11
  • 1
    ...and how to go about a naming convention without falling prey to the Smurf Naming anti-pattern? https://devcards.io/smurf-naming-convention Typically a namespace can provide specificity where needed. – Meadock May 19 '20 at 13:17
  • Convertint to ienumerable is specially useful when you need to use the .Reverse() in a Linq expression – Zuabros Sep 08 '20 at 21:06

6 Answers6

192

You don't need to convert it. List<T> implements the IEnumerable<T> interface so it is already an enumerable.

This means that it is perfectly fine to have the following:

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

as well as:

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

which could be invoked:

List<Book> books = FetchEmFromSomewhere();    
ProcessBooks(books);
CJBS
  • 15,147
  • 6
  • 86
  • 135
Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
  • 1
    If you function returns a Task> and you try to return Task.FromResult(list_of_books) this will not work. I used the AsEnumerable extension method to come around this. – Daniel Apr 24 '23 at 13:07
109

You can use the extension method AsEnumerable in Assembly System.Core and System.Linq namespace :

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

This will, as said on this MSDN link change the type of the List in compile-time. This will give you the benefits also to only enumerate your collection we needed (see MSDN example for this).

cdie
  • 4,014
  • 4
  • 34
  • 57
18

Why not use a Single liner ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>;
Rahul Chowdhury
  • 1,138
  • 6
  • 29
  • 52
11

As far as I know List<T> implements IEnumerable<T>. It means that you do not have to convert or cast anything.

Elalfer
  • 5,312
  • 20
  • 25
  • 8
    It depends. If you try to set a `IEnumerable>` to an `IEnumerable>` it gives a compiler error since the second does not inherit from the first one. – Emaborsa Jul 24 '17 at 11:08
6
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

If it's the generic variant:

_Book_IE = _Book_List;

If you want to convert to the non-generic one:

IEnumerable ie = (IEnumerable)_Book_List;
Femaref
  • 60,705
  • 7
  • 138
  • 176
0

You need to

using System.Linq;

to use IEnumerable options at your List.

Jury
  • 1,227
  • 3
  • 17
  • 30