Sobes.tech
Junior

Ҳар кадом объект дар дохили цикл foreach истифода бурда мешавад?

sobes.tech AI

Ҷавоб аз AI

Дар цикли foreach метавон истифода бурд объектҳое, ки интерфейси System.Collections.IEnumerable ё System.Collections.Generic.IEnumerable<T>-ро амалӣ мекунанд.

Типҳои асосии объектҳо:

  • Аррейҳо (якмаслаҳ ва бисёрмаслаҳ)
  • Коллексияҳое, ки IEnumerable ё IEnumerable<T>-ро амалӣ мекунанд:
    • List<T>
    • Dictionary<TKey, TValue>
    • HashSet<T>
    • Queue<T> ва Stack<T>
    • Классҳои дигар аз фазоҳои номҳои System.Collections ва System.Collections.Generic
  • Сатрҳо (System.String - дар аломатҳо такрор мешаванд)
  • Объектҳое, ки аз ҷониби LINQ-запросҳо баргардонида мешаванд
  • Типҳои маълумоти худсохт, ки яке аз интерфейсҳоро амалӣ мекунанд.

Масалан:

// Аррей
string[] colors = {"сурх", " сабз", "сабз"};
foreach (string color in colors)
{
    // ...
}

// List<T>
List<int> numbers = new List<int> {1, 2, 3, 4, 5};
foreach (int number in numbers)
{
    // ...
}

// сатр
string text = "салом";
foreach (char c in text)
{
    // ...
}

// Dictionary<TKey, TValue> дар KeyValuePair<TKey, TValue> такрор мекунад
Dictionary<string, int> ages = new Dictionary<string, int>
{
    {"Alice", 30},
    {"Bob", 25}
};
foreach (KeyValuePair<string, int> entry in ages)
{
    // entry.Key, entry.Value
}

// Классии худсохт, ки IEnumerable<T>-ро амалӣ мекунад
public class MyCollection : IEnumerable<int>
{
    private int[] _data = {10, 20, 30};

    public IEnumerator<int> GetEnumerator()
    {
        foreach (var item in _data)
        {
            yield return item; // Истифодаи итератор
        }
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

// Истифодаи классии худсохт
MyCollection myCollection = new MyCollection();
foreach (int item in myCollection)
{
    // ...
}