Junior
Milyen típusú objektumokat lehet használni a foreach ciklusban C#-ban?
sobes.tech MI
Válasz az MI-től
C# nyelvben a foreach ciklusban bármilyen olyan objektumtípus használható, amely az alábbi interfészek egyikét implementálja:
System.Collections.IEnumerable- Nem generikus kollekciókhoz. Nem generikus enumerátortIEnumeratorbiztosít.System.Collections.Generic.IEnumerable<T>- Generikus kollekciókhoz. Generikus enumerátortIEnumerator<T>biztosít.
Egy osztály vagy struktúra szintén használható a foreach-ben, ha rendelkezik nyilvános GetEnumerator() metódussal, amely a következő szignatúrát implementálja (ezt nevezik pattern-alapú foreach-nek):
- Nyilvános
Currenttulajdonság, amely bármilyen típusú értéket visszaad. - Nyilvános
MoveNext()metódus, amelyboolértéket ad vissza. - Opcionálisan, nyilvános
Dispose()metódus (a források helyes felszabadításáhozusing-gal együtt).
Beépített típus példák, amelyeket használhatunk:
- Tömbök (
int[],string[], stb.) - A
System.Collectionsnévtérből származó kollekciók:ArrayList,Hashtable,Queue,Stack. - A
System.Collections.Genericnévtérből származó kollekciók:List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>,Stack<T>. - Szövegek (
string) - ezek karakterláncokchartípusú karakterekből.
Példa egy saját típusra, amely támogatja a foreach-t a mintának megfelelően:
// Egyszerű saját típus, amely támogatja a foreach-t
public class MyEnumerable
{
private int[] data = { 1, 2, 3, 4, 5 };
// GetEnumerator metódus, amely támogatja a foreach-t a mintának megfelelően
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
// Belső enumerátor osztály
public class MyEnumerator
{
private int[] data;
private int currentIndex = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// Current tulajdonság
public int Current => data[currentIndex];
// MoveNext metódus
public bool MoveNext()
{
currentIndex++;
return currentIndex < data.Length;
}
// Dispose metódus (opcionális)
public void Dispose()
{
// Erőforrások felszabadítása, ha szükséges
}
}
}
// Használat a `foreach`-ben
// var collection = new MyEnumerable();
// foreach (var item in collection)
// {
// // Console.WriteLine(item);
// }