Listeden IEnumerable biçimine dönüştürme


99
IEnumerable<Book> _Book_IE
List<Book> _Book_List

Nasıl dönüştürmek amacıyla yapayım _Book_Listiçine IEnumerableformatında?


6
En azından bir kongresi var, ha?
Femaref

1
Kirk'ün yorumunun neden bu kadar çok "yükselişi" olduğunu merak eden insanlar için, bunun nedeni değişkeninize istediğiniz gibi isim verememenizdir! bunun için kurallar vardır ve bunları takip etmeniz şiddetle tavsiye edilir, böylece kodunuz açık ve anlaşılır olabilir, bu size Stack-overflow veya GitHub gibi yerlerde yardım etmeye çalışan insanlara yardımcı olacaktır! daha fazla bilgi için kitabı okuyun: Robert C. Martin tarafından yazılan Clean Code .
KADEM Mohammed

1
... ve Şirin Adlandırma anti-modeline düşmeden bir adlandırma konvansiyonuna nasıl devam edilir? devcards.io/smurf-naming-convention Tipik olarak bir ad alanı, gerektiğinde özgüllük sağlayabilir.
Meadock

Bir Linq ifadesinde .Reverse () 'i kullanmanız gerektiğinde
Zuabros

Yanıtlar:


152

Dönüştürmenize gerek yok. arabirimi zaten numaralandırılabilir olması için List<T>uygular IEnumerable<T>.

Bu, aşağıdakilere sahip olmanın tamamen iyi olduğu anlamına gelir:

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

Hem de:

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

hangisi çağrılabilir:

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

66

Assembly System.Core ve System.Linq ad alanında AsEnumerable uzantı yöntemini kullanabilirsiniz:

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

Bu, bu MSDN bağlantısında belirtildiği gibi , derleme sırasında Listenin türünü değiştirecektir. Bu size, sadece ihtiyaç duyduğumuz koleksiyonunuzu numaralandırma avantajlarını da sağlayacaktır (bunun için MSDN örneğine bakın).


Basit görünüyor, ancak dönüştürmenin en kolay yolunu yapıyor. Teşekkürler
Ishwor Khanal

1
Koleksiyona bir şey eklemeniz gerekmiyorsa, IEnumerable kullanmalı / iade etmelisiniz.
AZ_

15

Neden Tek astar kullanmıyorsunuz ...

IEnumerable<Book> _Book_IE= _Book_List as IEnumerable<Book>;

11

Bildiğim kadarıyla List<T>uygular IEnumerable<T>. Bu, herhangi bir şeyi dönüştürmek veya döküm yapmak zorunda olmadığınız anlamına gelir.


4
Değişir. Eğer bir ayarlamaya çalışırsanız IEnumerable<IList<obj>>bir karşı IEnumerable<IEnumerable<obj>>ikinci ilki devralan olmadığından bu bir derleyici hata veriyor.
Emaborsa

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

Genel varyant ise:

_Book_IE = _Book_List;

Jenerik olmayana dönüştürmek istiyorsanız:

IEnumerable ie = (IEnumerable)_Book_List;

5
Burada alçıya ihtiyacınız yok.
Jon Skeet

2
Bazıları açıkça uygulandığı için jenerik olmayan arayüzden belirli yöntemleri istiyorsanız veya burada yanlış yolda mıyım?
Femaref

0

Gerek

using System.Linq;

IEnumerableseçeneklerini kullanmak için List.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.