Преобразование из списка в формат IEnumerable


98
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Как мне сделать, чтобы преобразовать _Book_Listв IEnumerableформат?


58
К сожалению, ваше соглашение об именах уникально.
Кирк Уолл

6
По крайней мере, у него есть соглашение, а?
Femaref

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

1
... и как сделать так, чтобы соглашение об именах не стало жертвой антипаттерна Smurf Naming? devcards.io/smurf-naming-convention Обычно пространство имен может обеспечивать конкретность там, где это необходимо.
Meadock

Convertint в ienumerable особенно полезен, когда вам нужно использовать .Reverse () в выражении Linq
Зуаброс,

Ответы:


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);

64

Вы можете использовать метод расширения 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.