IEnumerable
- Bir kolleksiyondan elemanları teker teker almak için bir metod tanımlayan bir interfacedir.
- Genellikle bir dizi elemanı döndüren metodların return typesi olarak kullanılır.
- Bu interface , bir koleksiyonun foreach döngüsünde(loop) kullanılmasına izin verir.
- Aynı zamanda neredeyse tüm LINQ işlemleri (Count(),Where(), Select() vs.) için base typedır.
- IEnumerable'ın doğası, Usera bir objeyi enumerate edebileceğini söylemektir. Bunu enumerationun sonuna gelene kadar bir sonraki elemena tek tek geçerek yapar.
- IEnumerable lazydir.
Lazy gerçekten ihtiyaç duyulana kadar bir değerin hesaplanmasını geciktirmek için kullanılan bir tekniktir .IEnumerable bağlamında, dizinin öğelerinin, diziyi kullanan kod tarafından gerçekten erişilene kadar hesaplanmadığı anlamına gelir.
int.MaxValue'ye kadar kapsamlı bir asal sayılar listesi oluşturduğumuz küçük bir örnek. Ancak kullanıcı tüm sayılar yerine sadece 100 istiyorsa 100. asal sayıdan sonra devam etmiyoruz.
IQueryable
IQuerable, IEnumrableyi extend eder ve genellikle memoryde tutulmayan nesneler veya koleksiyonlarla kullanılır. En göze çarpan örnek, DbContext'in (veya daha iyisi DbSet'in) size temel depolama sağlayıcısından verilerinizi toplamak için bir IQueryable nesnesi sunduğu Entity Framework'tür. Aynı şey Linq to XML için de geçerlidir.
Koleksiyonlar için IEnumerable, verileri sorgulamak için IQueryable kullanılır. Ama ikisinin de ortak bir davranışı var:aynı zamanda lazy olarak değerlendirilir. Her iki tür de hemen çalıştırılmaz. Bunları örneğin ToList() aracılığıyla gerçekleştirmek gerekir.
Ne zaman kullanılır?
Memory dışında olan bir dizi veri kaynağıyla çalışmak istiyorsanız, IQueryable interfacesini kullanmak istersiniz. Aksine, veri kaynağınız memorydeyse(RAM) IEnumerable'ı kullanırsınız.
IQurable ve IEnumerable farkı için buraya tıklayabilisin.
ICollection
IEnumerable ve IQueryable lazy olarak değerlendirildi fakat ICollection lazy değildir.
ICollection, enumerationa birkaç işlevsellik ekler: Add, Remove ve Clear gibi. Artık sahip olduğumuz koleksiyonu mutasyona uğratabileceğimizdir. IEnumerable ve IQuerable interfacelerinde bu mümkün değildi. ICollection, IEnumerable'dan da miras alır. Böylece birbirlerinin üzerine inşa edildiklerini görebilirsiniz. Dolayısıyla, ne zaman bir ICollection türüne sahipseniz, onu IEnumerable için de kullanabilirsiniz. Bu nedenle LINQ temelde tüm koleksiyonlarda çalışır çünkü neredeyse tamamı IEnumerable'dan miras alır.
Ne zaman kullanılır?
Halihazırda gerçekleştirilmiş bir nesneye ihtiyacınız olduğunda (örneğin bir LINQ sorgusunun sonucu olarak) veya koleksiyonun kendisini değiştirmek istediğinizde ICollection'ı kullanın. Yani belirli girişleri Add veya Remove yapmak istediğimizde.
IList
IList, ICollection'dan devralır, yani ICollection ile yapabileceğiniz her şeyi IList ile de yapabilirsiniz. Peki o zaman fark nedir? IList'in bir indexera sahip olmasıdır. Dolayısıyla, enumerationda sabit düzene sahibiz.
Ne zaman kullanılır?
Yani buradaki kullanım durumu açık. Bir öğeyi indeks yoluyla elde etmek, öğe çıkarmak veya eklemek istiyorsanız, IList sizin adayınız olabilir.
IReadOnlyCollection ve IReadOnlyList
Adından da anlaşılacağı gibi, yalnızca öğeleri okuyabilirsiniz ancak koleksiyona bir şey eklemenize, kaldırmanıza veya koleksiyondan bir şey silmenize izin verilmez.
Ne zaman kullanılır?
Koleksiyonun durumunu değiştirmek istemediğiniz (Ekle, Kaldır, Temizle) durumlarda kullanabiliriz. İndeksleyiciye ihtiyacınız varsa, IReadOnlyCollection yerine IReadOnlyList'i kullanın
ISet
Uniq öğelerin bir koleksiyonudur.
ISet türünde bir nesneniz varsa, içinde dubicate olmadığını bilirsiniz.
Add,Remove gibi metodları vardır ve indexera sahip değildir.
Ne zaman kullanılır?
Bir öğe koleksiyonunu depolamak ve dublice olmadığından emin olmak istediğinizde kodunuzda ISet'i kullanabilirsiniz.
HashSet
HashSet yalnızca uniq öğelere sahip olduğundan, dahili yapısı daha hızlı aramalar için optimize edilmiştir. Geçerli bir sözdizimi olmasına rağmen, bir HashSet üzerinden foreach kullanmak da mantıklı değil. Bir küme, herhangi bir düzene sahip olmamakla tanımlanır, foreach kullanmak bir dereceye kadar düzen empoze eder
Stack
Last in First out şeklinde çalışır.
First in First out şeklinde çalışır.
Hiç yorum yok:
Yorum Gönder