Junior
Kādus objektu tipus var izmantot foreach ciklā C#?
sobes.tech AI
Atbilde no AI
C# valodā foreach cikls var izmantot jebkura veida objektus, kas realizē vienu no šiem interfeisiem:
System.Collections.IEnumerable- neuniversālām kolekcijām. Nodrošina neuniversāloIEnumeratorenumeratoru.System.Collections.Generic.IEnumerable<T>- universālām kolekcijām. Nodrošina universāloIEnumerator<T>enumeratoru.
Klase vai struktūra arī var tikt izmantota foreach, ja tai ir publiska metode GetEnumerator(), kas atgriež šādu pašu objektu, kas realizē šo signatūru (to sauc par pattern-based foreach):
- Publiska
Currentīpašība, kas atgriež jebkuru tipu. - Publiska
MoveNext()metode, kas atgriežbool. - Opciju, publiska
Dispose()metode (pareizai resursu atbrīvošanai, izmantojotusing).
Piemēri iebūvētiem tipiem, kurus var izmantot:
- Masīvi (
int[],string[]un tā tālāk) - Kolekcijas no
System.Collectionstelpas:ArrayList,Hashtable,Queue,Stack. - Kolekcijas no
System.Collections.Generictelpas:List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>,Stack<T>. - Virknes (
string) - tās ir rakstzīmju secībachar.
Piemērs lietotāja tipam, kas atbalsta foreach pēc šablona:
// Vienkāršs lietotāja tips, kas atbalsta `foreach`
public class MyEnumerable
{
private int[] data = { 1, 2, 3, 4, 5 };
// `GetEnumerator` metode, kas atbalsta `foreach`
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
// Iekšējā klase - enumerators
public class MyEnumerator
{
private int[] data;
private int currentIndex = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// `Current` īpašība
public int Current => data[currentIndex];
// `MoveNext` metode
public bool MoveNext()
{
currentIndex++;
return currentIndex < data.Length;
}
// `Dispose` metode (neobligāti)
public void Dispose()
{
// resursu atbrīvošana, ja nepieciešams
}
}
}
// Izmanto `foreach`
// var collection = new MyEnumerable();
// foreach (var item in collection)
// {
// // Console.WriteLine(item);
// }