IEnumerable Ö»ÊDZíÃ÷ij¸ö¶ÔÏóÄܹ»±»Ã¶¾Ù£¬ÕæÕýµÄ¹¤×÷ÊÇÓÉIEnumeratorµÄCurrent¡¢ MoveNext¡¢ResetÍê³ÉµÄ£¬ÎªÊ²Ã´ÒªÓÐ2¸ö²»Í¬µÄ½Ó¿ÚÀ´×÷ö¾ÙÄØ£¿Ö÷ÒªÊÇ¿¼Âǵ½±»Ã¶¾ÙµÄ¶ÔÏó»áÓжà¸ö¶ÀÁ¢µÄ¿Í»§¶Ëµ÷Óá£
ÔÚÏÖʵӦÓÃÖУ¬¶ÔÓÚ¼¯ºÏÒÔ¼°Ã¶¾ÙÕâЩ¼¯ºÏµÄÐèÇó·Ç³£Æձ飬 Òò´ËÔÚ.NETÖм¯ºÏËùÒÀÀµµÄ½Ó¿Ú±»Éè¼ÆΪ¹«¹²µÄ¡£ÏëҪʵÏÖ¶ÔÏóµÄö¾Ù¾Í±ØÐë¼Ì³ÐIEnumerable½Ó¿Ú¡£
public interface IEnumerable
{
public IEnumerator GetEnumerator();
}
ËüÖ»ÓÐÒ»¸ö³ÉÔ±£ºGetEnumerator·½·¨¡£¸Ã·½·¨·µ»ØÒ»¸öÊÀ¼ÍµÄö¾ÙÆ÷(enumerator)¶ÔÏó¡£
Òª¶¨ÒåÒ»¸öö¾ÙÆ÷¾ÍÒª±ØÐëʵÏÖIEnumrator½Ó¿Ú:
public interface IEnumerator
{
public Boolean MoveNext();
public Object Current { get; }
public void Reset();
}
Ò²¾ÍÊÇ˵Èç¹ûÎÒÃÇÏ£ÍûÒ»¸öÀàÐÍÖ§³Öö¾ÙÌØÐÔ£¬ÄÇôÎÒÃǾͱØÐ뻹Ҫ¶îÍⶨÒåÒ»¸ö¸¨ÖúÀàÐÍÀ´ÊµÏÖIEnumeratorµÄËùÓз½·¨¡£Õâ¸ö¸¨ÖúÀàÐÍͨ³£±»¶¨ÒåΪһ¸öNested classÉùÃ÷ÔÚÖ÷ÀàÄÚ²¿¡£ÕâÑùÔÚʵÏÖµÄʱºòÎÒÃÇ·¢ÏÖ£¬ÔÚappµ÷ÓÃGetEnumerator()·½·¨Ê±£¬ÎÒÃÇÐèÒª¹¹ÔìÒ»¸ö¸¨ÖúÀàÐ͵ÄʵÀý×÷Ϊ·µ»ØÖµ¡£