C# - CharEnumerator osztály használata

forráskód letöltése
Ha adott alkalmazásunkban egy tetszőleges sztring, melyet karakterekre kell bontanunk, akkor ehhez megfelelő segítséget nyújt a CharEnumerator osztály.
Mellékelt példában ennek használatát vesszük szemügyre.
Current
Osztály: System.CharEnumerator
public char Current {get;}
A Current property-ből olvashatjuk ki az aktuális karakterét a sztringnek.
Megjegyzés
Az osztály példányának létrehozása után, illetve a Reset függvény hívása után, csak az első MoveNext függvény hívását követően használható a Current. Amíg ez nem történik meg, addig az osztály belső indexe nem mutat egy karakterre sem.
MoveNext
Osztály: System.CharEnumerator
public bool MoveNext();
Az osztály belső indexét lépteti eggyel előre. Ennek következtében a Current property a következő karaktert fogja tartalmazni.
Visszatérési érték
Igaz értéket ad vissza, ha még van további kiolvasható karakter.
Reset
Osztály: System.CharEnumerator
public void Reset();
Az osztály belső indexét állítja alapértékre. Ekkor a Current property használata előtt minimum egy MoveNext függvény hívása szükséges.
A példaprogram
A példában a textBox aktuális szövegét bontjuk karakterekre és jelenítjük meg azokat egy ListBox-ban úgy, hogy minden sorába egy-egy karaktert helyezünk.
Mivel a CharEnumerator osztálynak nincs publikus konstruktora, így azt csak a String osztály GetEnumerator függvénye segítségével hozhatjuk létre. A létrehozás után a belső index még nem mutat sehova, így a MoveNext hívásával léptetjük ezt az első karakterre. Ekkor a Current property-ből ezt olvashatjuk ki. A MoveNext függvényt mindaddig hívhatjuk, amíg az igaz értéket ad vissza, mert addig biztos, hogy van még olyan karakter, amit még nem olvastunk ki a Current property-n keresztül.
 private void button1_Click(object sender, System.EventArgs e)
 {
   String s = textBox1.Text;
   CharEnumerator ce = s.GetEnumerator();
   while (ce.MoveNext())
   {
     listBox1.Items.Add(ce.Current);
   }
Ha a Reset függvényt használjuk, akkor a belső index ismét egy nem létező karakterre mutat. Tekinthetjük ezt úgy is, hogy az első karakter elé fog mutatni és a MoveNext hívása lépteti az első karakterre. E lépés nélkül a Current használata biztos, hogy hibaüzenethez vezetne, így erről ne feledkezzünk meg.
   listBox1.Items.Add("--- Reset() ---");
   ce.Reset();
   ce.MoveNext();
   listBox1.Items.Add(ce.Current);   
 }