Junior
C#-da foreach döngüsündə hansı obyekt tipləri istifadə oluna bilər?
sobes.tech Süni İntellekt
AI-dan cavab
C# dilində foreach döngüsündə, aşağıdakı interfeyslərdən birini tətbiq edən hər hansı obyekt növü istifadə oluna bilər:
System.Collections.IEnumerable- Qeyri-ənənəvi kolleksiyalar üçün. Qeyri-ənənəvi enumeratorIEnumeratortəmin edir.System.Collections.Generic.IEnumerable<T>- Ənənəvi kolleksiyalar üçün. Ənənəvi enumeratorIEnumerator<T>təmin edir.
Bir sinif və ya struktur, əgər GetEnumerator() adlı ictimai metodu varsa və aşağıdakı imzaya uyğun bir nümunə qaytarırsa, foreach-də istifadə oluna bilər (buna pattern əsaslı foreach deyilir):
- Hər hansı bir tip qaytaran ictimai
Currentxüsusiyyəti. boolqaytaran ictimaiMoveNext()metodu.- İstəyə bağlı olaraq,
Dispose()adlı ictimai metod (resursların düzgün sərbəst buraxılması üçünusingilə istifadə edilərkən).
İstifadə oluna bilən daxili tiplər nümunələri:
- Massivlər (
int[],string[]və s.) System.Collectionsad sahəsindən kolleksiyalar:ArrayList,Hashtable,Queue,Stack.System.Collections.Genericad sahəsindən kolleksiyalar:List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>,Stack<T>.- Sətirlər (
string) - bunlarcharsimvol ardıcıllığıdır.
foreach üçün pattern-ə uyğun dəstək verən xüsusi tip nümunəsi:
// Sadə pattern-ə uyğun `foreach` dəstəkləyən xüsusi tip
public class MyEnumerable
{
private int[] data = { 1, 2, 3, 4, 5 };
// Pattern-ə uyğun `GetEnumerator` metodu
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
// Daxili enumerator sinfi
public class MyEnumerator
{
private int[] data;
private int currentIndex = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// `Current` xüsusiyyəti
public int Current => data[currentIndex];
// `MoveNext` metodu
public bool MoveNext()
{
currentIndex++;
return currentIndex < data.Length;
}
// `Dispose` metodu (istəyə bağlı)
public void Dispose()
{
// Resursların sərbəst buraxılması, lazım olarsa
}
}
}
// `foreach` istifadə nümunəsi
// var collection = new MyEnumerable();
// foreach (var item in collection)
// {
// // Console.WriteLine(item);
// }