IEnumerable<T>
IEnumerable<T> ile yinelenebilir koleksiyon sözleşmesini öğrenirsin.
IEnumerable<T> sözleşmesi
IEnumerable<T>, üzerinde foreach ile gezinilebilen her dizinin sözleşmesidir. Tek bir üye gerektirir: GetEnumerator() yöntemi. Bu yöntem bir IEnumerator<T> döndürür.
List<T>, T[] ve Queue<T> hepsi IEnumerable<T> uygulayan türlerdir. Bir metot IEnumerable<int> alıyorsa tüm bu türleri kabul eder. Bu, koleksiyonlar arasında geçiş yapmayı kolaylaştırır.
GetEnumerator ve foreach
foreach (var x in seq) yazdığında derleyici arka planda seq.GetEnumerator() çağırır. Döngü her adımda MoveNext() çağırır ve Current özelliğini okur. MoveNext false döndüğünde döngü durur.
Yani foreach, IEnumerator üyelerinin özellikle çağrılmasının kısayoludur. IEnumerable<T> uygulayan bir sınıf yazarsan foreach otomatik olarak çalışır, ek kod gerekmez.
Uygulama IEnumerable<int> metodu yaz
Bir PrintAll(IEnumerable<int> items) metodu yaz: foreach ile her elemanı Console.WriteLine ile yazdırsın. Main içinde PrintAll(list) çağrısı ekle.
Örnek çözümü göster
PrintAll içinde foreach ile items'ı gez, her item'ı WriteLine ile yazdır. Main'e PrintAll(list); ekle.
Örnek çözüm:
using System;
using System.Collections.Generic;
class Program
{
static void PrintAll(IEnumerable<int> items)
{
foreach (var item in items)
{
Console.WriteLine(item);
}
}
static void Main()
{
var list = new List<int> { 1, 2, 3 };
PrintAll(list);
}
}
Kendini test et
-
IEnumerable<T> ne sağlar?
- foreach ile gezilebilirlik
- İndeksli erişim
- Thread güvenliği
- Otomatik sıralama
Cevabı göster
foreach ile gezilebilirlik — Doğru. IEnumerable<T> uygulayan türler foreach ile gezilir.
-
Arayüzü uygula
class Bag : IEnumerable<____>Cevabı göster
class Bag : IEnumerable<int> -
Üyeyi açıklamaya eşle
- GetEnumerator
- İteratör verir
- MoveNext
- Sonrakine geçer
- Current
- Şimdiki eleman
- Reset
- Başa döner