Преобразование из списка в формат 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).

cdie
источник
Выглядит просто, но позволяет легко конвертировать. Спасибо
Ishwor Khanal
1
Если вы не собираетесь добавлять что-то в Коллекцию, вам следует использовать / вернуть IEnumerable.
AZ_
15

Почему бы не использовать одинарный лайнер ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>;
Рахул Чоудхури
источник
11

Насколько я знаю List<T>орудия IEnumerable<T>. Это означает, что вам не нужно ничего конвертировать или преобразовывать.

Elalfer
источник
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;
Femaref
источник
5
Здесь вам не нужен гипс.
Джон Скит
2
Вам нужны конкретные методы из неуниверсального интерфейса, поскольку некоторые из них реализованы явно, или я здесь ошибаюсь?
Femaref
0

Тебе надо

using System.Linq;

использовать IEnumerableпараметры на вашем List.

Жюри
источник