Odpoveď: Objekty, ktoré môže foreach prechádzať, musia byť objekty kolekcie alebo poľa, ktoré implementujú superinterface IEnumerator alebo deklarovanú metódu GetEnumerator Q: Ale keď zvyčajne používam foreach in, používam ho priamo a nie je žiadny problém. Môžem sa opýtať, prečo je to tak? Ak chcete implementovať typ super rozhrania IEnumerator alebo deklarovanej metódy GetEnumerator, ako je uvedené v otázke, čo by ste mali urobiť? Ďakujem Odpoveď: Pri používaní foreach in zvyčajne používame systémovo definovanú triedu kolekcií (implementujúcu rozhranie ICollection). Napríklad arrayList, stringDictionary, array a podobne. Tieto sú zabalené platformou a sú blízko implementácie rozhrania IEnumerator. Aby trieda, ktorú píšete, mohla byť foreach súčasne, musíte implementovať rozhranie pri písaní triedy. To umožňuje následné prechádzanie po každom kroku. Napríklad definujte triedu ľudí a implementujte rozhranie IEnumerator. Ak existuje pole People[] tempPeople, môžete použiť: foreach( p in tempPeople){ console.writeline(p.name); Tým sa eliminuje problém s používaním for loops. Čo sa týka implementácie rozhrania Iemumerator. Stačí skontrolovať MSDN. Môžete tiež hľadať hrubšiu knihu.
|