C# vs C/C++ – część 3 (foreach)

Bardzo cieszy mnie w C# obecność instrukcji foreach, gdyż bardzo przydawała mi się ona, gdy programowałam w PHP.

Jednak w przeciwieństwie do PHP C# nie pozwala na zmianę wartości danej kolekcji w tejże pętli.

  • A propos foreach (pośrednio) to osobiście jestem pod wrażeniem iteratorów. Pomysł niby nie jest nowy, ale dopiero w C# jest pełna magia. Na przykład coś takiego:

    // klasa użytkownika implementująca interfejs IEnumerable w ten sposób,
    // że w pętli foreach można przejść cały plik czytając kolejne linie tekstu.
    TextFileIterator iterator = new TextFileIterator(„c:\\TextFile.txt”);

    foreach (string line in iterator)
    Console.WriteLine(line);

    To oczywiście prosty przykład – aktualnie pracuję nad kolekcją, która jest przechowywana na dysku twardym, nazwałem ją PersistentCollection i jest m.in. typem listy (IList). Kolekcja od początku do końca przechowywana jest na dysku, tak że jak program się wysypie czy zabraknie prądu to kolekcja i tak będzie zapamiętana. Teraz pracuję nad sortowaniem.

  • foreach w C++ znajdzie się w C++0x, więc nie jest tak źle ;]

  • Ben XO

    Actually, in PHP you can change the value in the array.

    e.g.

    foreach($arr as &$val) { $val++; }

  • Krzysiek

    for_each jest w C++ tylko w STLu (pomijając C++11). Trzeba dać #include .