Avatar
Majkel
Člen
Avatar
Majkel:

Ahoj,

chtěl bych se zeptat, v kterých případech je vhodné používat IEnumerable, ICollection nebo List. Například, mám metodu, z které chci vrátit kolekci dat. Mám ji vracet jako List, nebo jako IEnumerable? Jediné co vím je, že List má na sobě více metod, jak lze pracovat s kolekcí. Takže když je nepotřebuji, můžu použít jen IEnumerable. To ale určitě nebude všechno.

Mohl by mi to někdo trochu více přiblížit? Díky :-)

 
Odpovědět 19.10.2015 15:45
Avatar
Odpovídá na Majkel
Jakub Šárník:

Na tohle nenajdeš žádnou definitivní odpověd. Já osobně si myslím, že nejlepší je z metod vracet to nejjednodušší rozhraní, co potřebuješ, a nechat uživatele metody, ať si výsledek dosadí do jakýho typu chce. Ve většině případů je tak nejlepší vracet IEnumerable<T>. Pokud bude uživatel například dávad výsledky do foreach cyklu, tak mu na to stačí jen to IEnumerable<T>, ale může to jednoduše převést i na List<T>, pokud by bylo potřeba.
Pokud si ale píšeš nějakou metodu pro sebe a očekáváš vrácenej list, pak není problém vracet přímo List<T>.

 
Nahoru Odpovědět  +1 19.10.2015 16:27
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:

Souhlasím vesměs s Jakubem, že na tohle není definitivní, absolutně správná odpověď. Zajímavé rozdíly můžou nastat až to publikuješ pro někoho cizího.

Pak je rozdíl nezi IEnumerable a Listem podstatný. S IEnumerable dáváš jasně najevo, že si nepřeješ, aby se ti někdo šťoural ve vnitřku tvého objektu. Tedy pokud se nenajde "specialista", který si to převede na List.

Editováno 19.10.2015 17:10
 
Nahoru Odpovědět 19.10.2015 17:09
Avatar
Odpovídá na Majkel
Petr Čech (czubehead):

IEnumerable se většinou používá jako návratový typ metod, které vrací kolekci, třeba proto, že se dá použít yield return.
List se používá většinou na vlastnosti, ale na takové ty jednoduché, kde to má být prostě kolekce, se kterou se dá nějak rozumně pracovat.

Nahoru Odpovědět 19.10.2015 17:19
Why so serious? -Joker
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.