Odpověď: Objekty, které může foreach procházet, musí být objekty kolekce nebo pole, které jsou typu, který implementuje superrozhraní IEnumerator nebo deklarovanou metodu GetEnumerator Q: Ale když obvykle používám foreach in, používám ho přímo a není s tím problém. Mohu se zeptat, proč tomu tak je? Pokud chcete implementovat typ super rozhraní IEnumerator nebo deklarované metody GetEnumerator, jak je položeno v otázce, co byste měli udělat? Děkuju Odpověď: Při použití foreach in obvykle používáme systémově definovanou třídu kolekcí (implementující ICollection rozhraní). Například arrayList, stringDictionary, array atd. Tyto jsou balíčkovány platformou a jsou blízko implementaci rozhraní IEnumerator. Aby třída, kterou píšete, mohla probíhat současně, musíte při psaní této třídy implementovat toto rozhraní. To umožňuje následné přecházení po dalším kroku. Například definujte třídu osob a implementujte rozhraní IEnumerator. Pokud existuje pole People[] tempPeople, můžete použít: foreach( p in tempPeople){ console.writeline(p.name); Tím se eliminuje problém s používáním smyček for (smyček). Co se týče implementace rozhraní Iemumeratoru. Stačí se podívat na MSDN. Můžete také hledat silnější knihu.
|