Junior
Дар C#, кадом намудҳои объектҳоро метавон дар давраи foreach истифода бурд?
sobes.tech AI
Ҷавоб аз AI
Дар сикли foreach дар C# метавон истифода бурд ҳар кадом намудҳои объектҳо, ки яке аз интерфейсҳои зеринро иҷро мекунанд:
System.Collections.IEnumerable- барои ҷамъиятҳои ғайриуниверсалӣ. ОнEnumerator-и ғайриуниверсалӣIEnumerator-ро пешниҳод мекунад.System.Collections.Generic.IEnumerable<T>- барои ҷамъиятҳои универсалӣ. ОнEnumerator-и универсалӣ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);
// }