Odpowiedź: Obiekty, które mogą być przechodzine przez foreach, muszą być obiektami zbiorowymi lub tablicowymi, które są typem implementującym superinterfejs IEnumerator lub deklarowaną metodę GetEnumerator Q: Ale kiedy zwykle używam foreach in, używam go bezpośrednio i nie ma problemu. Czy mogę zapytać, dlaczego tak jest? Jeśli chcesz zaimplementować typ superinterfejsu IEnumerator lub zadeklarowanej metody GetEnumerator, jak pytasz, co powinieneś zrobić? Dziękuję Odpowiedź: Używając foreach in, zazwyczaj używamy systemowo definiowanej klasy kolekcji (implementującej interfejs ICollection). Na przykład: arrayList, stringDictionary, array itd. Są one pakowane przez platformę i są bliskie implementacji interfejsu IEnumerator. Aby klasa, którą piszesz, mogła działać jednocześnie w tym samym czasie, musisz zaimplementować interfejs podczas pisania klasy. Pozwala to na późniejsze przemieszczanie się po nich. Na przykład zdefiniuj klasę osób i zaimplementuj interfejs IEnumeratora. Jeśli istnieje tablica People[] tempPeople, możesz użyć: foreach( p in tempPeople){ console.writeline(p.name); Eliminuje to problem z używaniem pętli for. Jeśli chodzi o implementację interfejsu Iemumeratora. Po prostu sprawdź MSDN. Możesz też poszukać grubszej książki.
|