Ubah dari List ke format IEnumerable

98
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Bagaimana yang harus saya lakukan untuk mengonversi _Book_Listke IEnumerableformat?

Ada apa
sumber
58
Sayangnya, konvensi penamaan Anda unik.
Kirk Woll
6
Setidaknya dia punya konvensi, eh?
Femaref
1
Bagi orang-orang yang bertanya-tanya mengapa komentar Kirk memiliki begitu banyak "up", itu karena Anda tidak bisa hanya memberi nama variabel Anda seperti yang Anda inginkan! Ada kesepakatan untuk itu, dan Anda sangat disarankan untuk mengikutinya, sehingga kode Anda dapat jelas dan dimengerti, ini akan membantu orang yang mencoba membantu Anda di tempat-tempat seperti Stack-overflow atau GitHub! untuk informasi lebih lanjut baca buku: Clean Code oleh Robert C. Martin.
KADEM Mohammed
1
... dan bagaimana cara menjalankan konvensi penamaan tanpa menjadi korban anti-pola Penamaan Smurf? devcards.io/smurf-naming-convention Biasanya namespace dapat memberikan kekhususan jika diperlukan.
Meadock
Convertint to ienumerable secara khusus berguna ketika Anda perlu menggunakan .Reverse () dalam ekspresi Linq
Zuabros

Jawaban:

150

Anda tidak perlu mengubahnya. List<T>mengimplementasikan IEnumerable<T>antarmuka sehingga sudah dapat dihitung.

Ini berarti tidak masalah untuk memiliki yang berikut ini:

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

sebaik:

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

yang bisa dipanggil:

List<Book> books = FetchEmFromSomewhere();    
ProcessBooks(books);
Darin Dimitrov
sumber
64

Anda dapat menggunakan metode ekstensi AsEnumerable di Assembly System.Core dan namespace System.Linq:

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

Ini akan, seperti yang disebutkan di tautan MSDN ini, mengubah jenis Daftar dalam waktu kompilasi. Ini akan memberi Anda keuntungan juga untuk hanya menghitung koleksi Anda yang kami butuhkan (lihat contoh MSDN untuk ini).

cdie
sumber
Tampak sederhana tetapi merupakan cara termudah untuk mengonversi. Terima kasih
Ishwor Khanal
1
Jika Anda tidak seharusnya menambahkan sesuatu ke Collection maka Anda harus menggunakan / mengembalikan IEnumerable.
AZ_
15

Mengapa tidak menggunakan Single liner ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>;
Rahul Chowdhury
sumber
11

Sejauh yang saya tahu List<T>mengimplementasikan IEnumerable<T>. Artinya Anda tidak perlu mengubah atau mentransmisikan apa pun.

Elalfer
sumber
4
Tergantung. Jika Anda mencoba menyetel a IEnumerable<IList<obj>>ke an, IEnumerable<IEnumerable<obj>>ini memberikan kesalahan kompiler karena yang kedua tidak mewarisi dari yang pertama.
Emaborsa
4
IEnumerable<Book> _Book_IE;
List<Book> _Book_List;

Jika itu varian generik:

_Book_IE = _Book_List;

Jika Anda ingin mengonversi ke non-generik:

IEnumerable ie = (IEnumerable)_Book_List;
Femaref
sumber
5
Anda tidak membutuhkan pemeran di sini.
Jon Skeet
2
Anda lakukan jika Anda menginginkan metode tertentu dari antarmuka non-generik, karena beberapa di antaranya diterapkan secara eksplisit, atau apakah saya berada di jalur yang salah di sini?
Femaref
0

Kamu butuh

using System.Linq;

untuk menggunakan IEnumerableopsi di List.

Juri
sumber