Junior
Ինչ տեսակ օբյեկտներ կարելի է օգտագործել C#-ում foreach ցիկլում?
sobes.tech AI
Պատասխան AI-ից
Կոդի foreach ցիկլը C#-ում կարող է օգտագործել ցանկացած օբյեկտի տեսակ, որը իրականացնում է հետևյալ ինտերֆեյսներից մեկը՝
System.Collections.IEnumerable- ոչ-համընդհանուր հավաքածուների համար: ապահովում է ոչ-համընդհանուրIEnumeratorցուցակագրիչ:System.Collections.Generic.IEnumerable<T>- համընդհանուր հավաքածուների համար: ապահովում է համընդհանուրIEnumerator<T>ցուցակագրիչ:
Կլասը կամ կառուցվածքը կարող է նաև օգտագործվել foreach-ում, եթե ունենում է հանրային GetEnumerator() մեթոդ, որը վերադարձնում է հետևյալ սինթաքսին համապատասխան օբյեկտի օրինակ (այսպես կոչվում է pattern-based foreach):
- Հանրային
Currentհատկություն, որը վերադարձնում է ցանկացած տիպ: - Հանրային
MoveNext()մեթոդ, որը վերադարձնում էbool: - Ընտրովի, հանրային
Dispose()մեթոդ, որը անհրաժեշտ է ռեսուրսների ճիշտ ազատման համարusing-ի դեպքում:
Նմուշներ ներքին տիպերի, որոնք կարող են օգտագործվել:
- զանգվածներ (
int[],string[]և այլն): System.Collectionsտարածքից հավաքածուներ՝ArrayList,Hashtable,Queue,Stack:System.Collections.Genericտարածքից հավաքածուներ՝List<T>,Dictionary<TKey, TValue>,HashSet<T>,Queue<T>,Stack<T>:- տողեր (
string) - որոնք հանդիսանում են նիշերի հաջորդականությունchar:
Օգտագործողի տիպի օրինակ, որը աջակցում է foreach-ին ըստ օրինակակի:
// Պարզ օգտվողի տիպ, որը աջակցում է `foreach`
public class MyEnumerable
{
private int[] data = { 1, 2, 3, 4, 5 };
// GetEnumerator մեթոդը, որը աջակցում է `foreach`
public MyEnumerator GetEnumerator()
{
return new MyEnumerator(data);
}
// ներքին դաս - enumeration
public class MyEnumerator
{
private int[] data;
private int currentIndex = -1;
public MyEnumerator(int[] data)
{
this.data = data;
}
// `Current` հատկությունը
public int Current => data[currentIndex];
// `MoveNext` մեթոդը
public bool MoveNext()
{
currentIndex++;
return currentIndex < data.Length;
}
// `Dispose` մեթոդը (ընտրովի)
public void Dispose()
{
// ռեսուրսների ազատում, եթե անհրաժեշտ է
}
}
}
// Օգտագործում `foreach`-ում
// var collection = new MyEnumerable();
// foreach (var item in collection)
// {
// // Console.WriteLine(item);
// }