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?


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

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


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

11

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


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;

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.