Sobes.tech
Junior

Welche Objekte können in einer foreach-Schleife verwendet werden?

sobes.tech KI

Antwort von AI

In der foreach-Schleife können Objekte verwendet werden, die die Schnittstelle System.Collections.IEnumerable oder System.Collections.Generic.IEnumerable<T> implementieren.

Haupttypen von Objekten:

  • Arrays (eindimensional und mehrdimensional)
  • Sammlungen, die IEnumerable oder IEnumerable<T> implementieren:
    • List<T>
    • Dictionary<TKey, TValue>
    • HashSet<T>
    • Queue<T> und Stack<T>
    • Andere Klassen aus den Namespaces System.Collections und System.Collections.Generic
  • Strings (System.String - iterieren über Zeichen)
  • Objekte, die durch LINQ-Abfragen zurückgegeben werden
  • Eigenständige Datentypen, die eine der genannten Schnittstellen implementieren.

Beispiel:

// Array
string[] colors = {"rot", "grün", "blau"};
foreach (string color in colors)
{
    // ...
}

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

// string
string text = "hallo";
foreach (char c in text)
{
    // ...
}

// Dictionary<TKey, TValue> iteriert über KeyValuePair<TKey, TValue>
Dictionary<string, int> ages = new Dictionary<string, int>
{
    {"Alice", 30},
    {"Bob", 25}
};
foreach (KeyValuePair<string, int> eintrag in ages)
{
    // eintrag.Key, eintrag.Value
}

// Eigenständige Klasse, die IEnumerable<T> implementiert
public class MyCollection : IEnumerable<int>
{
    private int[] _data = {10, 20, 30};

    public IEnumerator<int> GetEnumerator()
    {
        foreach (var item in _data)
        {
            yield return item; // Verwendung des Iterators
        }
    }

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

// Verwendung der eigenen Klasse
MyCollection myCollection = new MyCollection();
foreach (int item in myCollection)
{
    // ...
}