Junior
C#'ta foreach döngüsünde hangi nesne türleri kullanılabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
C# dilinde foreach döngüsünde, aşağıdaki arayüzlerden birini uygulayan herhangi bir nesne tipi kullanılabilir:
System.Collections.IEnumerable- Genel olmayan koleksiyonlar için. Genel olmayan bir yineleyiciIEnumeratorsağlar.System.Collections.Generic.IEnumerable<T>- Genel koleksiyonlar için. Genel bir yineleyiciIEnumerator<T>sağlar.
Bir sınıf veya yapı, eğer aşağıdaki imzayı uygulayan bir GetEnumerator() adlı genel bir metoda sahipse, foreach içinde kullanılabilir (buna pattern tabanlı foreach denir):
- Herhangi bir tür döndüren
Currentadlı genel bir özellik. booldöndürenMoveNext()adlı genel bir metod.- Opsiyonel olarak, kaynakların doğru şekilde serbest bırakılması için
Dispose()adlı genel bir metod (kullanım sırasındausingile birlikte).
Kullanılabilecek yerleşik tür örnekleri:
- Diziler (
int[],string[]vb.) System.Collectionsisim alanındaki koleksiyonlar:ArrayList,Hashtable,Queue,Stack.System.Collections.Genericisim alanındaki koleksiyonlar:List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>,Stack<T>.- Dizgeler (
string) - bunlarcharkarakter dizisidir.
foreach ile kullanılabilen, pattern'e uygun bir özel tür örneği:
// `foreach` destekleyen basit özel tür
public class MyEnumerable
{
private int[] data = { 1, 2, 3, 4, 5 };
// Pattern'e uygun `GetEnumerator` metodu
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
// İç sınıf - enumerator
public class MyEnumerator
{
private int[] data;
private int currentIndex = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// `Current` özelliği
public int Current => data[currentIndex];
// `MoveNext` metodu
public bool MoveNext()
{
currentIndex++;
return currentIndex < data.Length;
}
// `Dispose` metodu (opsiyonel)
public void Dispose()
{
// Kaynakların serbest bırakılması gerekirse
}
}
}
// `foreach` kullanımı
// var collection = new MyEnumerable();
// foreach (var item in collection)
// {
// // Console.WriteLine(item);
// }