Junior
Milliseid objektitüüpe saab kasutada foreach-tsüklis C#-s?
sobes.tech AI
Vastus AI-lt
C# keeles saab foreach tsüklit kasutada mis tahes objektitüüpide puhul, mis realiseerivad ühe järgmistest liidestest:
System.Collections.IEnumerable- mitteuniversaalsete kogude jaoks. Pakub mitteuniversaalsetIEnumeratorloendurit.System.Collections.Generic.IEnumerable<T>- universaalsete kogude jaoks. Pakub universaalsetIEnumerator<T>loendurit.
Klass või struktuur võib samuti olla kasutatav foreach, kui neil on avalik meetod GetEnumerator(), mis tagastab sellise objekti, mis realiseerib järgmise signatuuri (seda nimetatakse pattern-based foreach-ks):
- Avalik omadus
Current, mis tagastab mis tahes tüüpi. - Avalik meetod
MoveNext(), mis tagastabbool. - Valikuline, avalik meetod
Dispose()(õige ressursside vabastamise jaoksusing-i kasutamisel).
Näited sisseehitatud tüüpide kohta, mida saab kasutada:
- Massiivid (
int[],string[]ja nii edasi) System.Collectionsruumi kogud:ArrayList,Hashtable,Queue,Stack.System.Collections.Genericruumi kogud:List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>,Stack<T>.- Stringid (
string) - need on tähemärkide järjestusedchar.
Näide kasutaja tüübi kohta, mis toetab foreach mustri järgi:
// Lihtne kasutaja tüüp, mis toetab `foreach`
public class MyEnumerable
{
private int[] data = { 1, 2, 3, 4, 5 };
// GetEnumerator meetod, mis toetab `foreach`
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
// Siseklass - loendur
public class MyEnumerator
{
private int[] data;
private int currentIndex = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// `Current` omadus
public int Current => data[currentIndex];
// `MoveNext` meetod
public bool MoveNext()
{
currentIndex++;
return currentIndex < data.Length;
}
// `Dispose` meetod (valikuline)
public void Dispose()
{
// ressursside vabastamine, kui vaja
}
}
}
// Kasutamine `foreach`-s
// var collection = new MyEnumerable();
// foreach (var item in collection)
// {
// // Console.WriteLine(item);
// }