Перетворити зі списку у формат IEnumerable


97
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Як мені зробити, щоб перетворити _Book_Listу IEnumerableформат?


58
Ваша конвенція про іменування, на жаль, унікальна.
Kirk Woll

6
Принаймні, у нього є конвенція, так?
Femaref

1
Для людей, які цікавляться, чому в коментарі Кірка так багато "злетів", це тому, що ви не можете просто назвати свою змінну так, як хочете! для цього існують домовленості, і настійно рекомендується дотримуватися їх, щоб ваш код був зрозумілим та зрозумілим, це допоможе людям, які намагаються допомогти вам у таких місцях, як Stack-overflow або GitHub! для отримання додаткової інформації прочитайте книгу: « Чистий кодекс » Роберта К. Мартіна.
КАДЕМ Мохаммед

1
... і як прийняти конвенцію про іменування, не потрапляючи в жертву анти-шаблону Smurf Naming? devcards.io/smurf-naming-convention Зазвичай простір імен може надавати конкретність там, де це потрібно.
Медок

Відповіді:


150

Не потрібно його перетворювати. List<T>реалізує IEnumerable<T>інтерфейс, тому його вже можна перелічити.

Це означає, що цілком нормально мати таке:

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

так само, як:

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

які можна викликати:

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

63

Ви можете використовувати метод розширення AsEnumerable в просторі імен System.Core та System.Linq:

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

Як зазначено у цьому посиланні MSDN, це змінить тип Списку під час компіляції. Це дасть вам переваги також лише перерахувати вашу колекцію, яка нам потрібна (див. Приклад MSDN для цього).


Виглядає просто, але робить найпростіший спосіб конвертації. Дякую
Ishwor Khanal

1
Якщо ви не хочете щось додавати до колекції, вам слід використовувати / повернути IEnumerable.
AZ_


11

Наскільки я знаю List<T>знаряддя праці IEnumerable<T>. Це означає, що вам не потрібно нічого перетворювати чи відтворювати.


4
Це залежить. Якщо ви намагаєтесь встановити значення a IEnumerable<IList<obj>>, IEnumerable<IEnumerable<obj>>це видає помилку компілятора, оскільки друга не успадковується від першої.
Emaborsa

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

Якщо це загальний варіант:

_Book_IE = _Book_List;

Якщо ви хочете перетворити на не загальний:

IEnumerable ie = (IEnumerable)_Book_List;

5
Тут вам не потрібен акторський склад.
Джон Скіт,

2
Ви хочете, якщо вам потрібні конкретні методи із не-загального інтерфейсу, оскільки деякі з них явно реалізовані, або я тут не в тому напрямку?
Femaref

0

Тобі потрібно

using System.Linq;

використовувати IEnumerableваріанти на вашому List.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.