Vastaus: Objektit, joita foreach voi käydä läpi, täytyy olla kokoelma- tai taulukko-objekteja, jotka ovat samantyyppisiä, jotka toteuttavat superinterface IEnumeratorin tai ilmoitetun GetEnumerator-metodin Q: Mutta kun yleensä käytän foreach iniä, käytän sitä suoraan, eikä siinä ole mitään ongelmaa. Saanko kysyä, miksi näin on? Jos haluat toteuttaa superrajapinnan IEnumeratorin tai ilmoitetun GetEnumerator-metodin, kuten kysymyksessä kysytään, mitä sinun pitäisi tehdä? Kiitos Vastaus: Kun käytetään foreach in:ää, käytämme yleensä järjestelmämäärittelemää kokoelmaluokkaa (toteuttaen ICollection-rajapinnan). Esimerkiksi arrayList, stringDictionary, array jne. Nämä paketoidaan alustan toimesta ja ne ovat lähellä IEnumerator-rajapinnan toteutusta. Jotta kirjoittamasi luokka voisi tehdä foreach samaan aikaan, sinun täytyy toteuttaa rajapinta luokkia kirjoittaessasi. Tämä mahdollistaa jokaisen kulkumatkan myöhemmäksi. Esimerkiksi määrittele ihmisluokka ja toteuta IEnumerator-rajapinta. Jos on olemassa taulukko People[] tempPeople, voit käyttää: foreach( p in tempPeople){ console.writeline(p.name); Tämä poistaa for-silmukoiden käytön vaivan. Mitä tulee Iemumeratorin käyttöliittymän toteuttamiseen. Katso vain MSDN. Voit myös etsiä paksumpaa kirjaa.
|