用 foreach 迭代一个列表时,先后顺序如何决定呢?
------------------------------------------
假如用 foreach 迭代数组或列表,总要有一个先后顺序吧。可是顺序的规则是什么呢?
列表中有可能是多个对象,对象之间如何确实先后顺序呢?总不能是乱序随机排吧?

解决方案 »

  1.   

    这取决于你如何实现 IEnumerator 
      

  2.   

    是的取决于重启的IEnumerator是如何实现的。
      

  3.   

    比如下面的代码,foreach时,按哪个约定的顺序呢?
    我试的结果是 Add() 的顺序,可是就算这样,这个顺序也应该保存在类中吧??using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace diedai
    {
        class zgh1
        {
            int id;
            string name;        public override string ToString()
            {
                return string.Format("id={0},name={1}", id, name);
            }        public zgh1(int i, string n)
            {
                id = i;
                name = n;
            }
        }    class zgh1s
        {
            public List<zgh1> zghs = new List<zgh1>();        public zgh1s()
            {
                zghs.Add(new zgh1(9, "aaaaa"));
                zghs.Add(new zgh1(1, "bbbbb"));
                zghs.Add(new zgh1(3, "ccccc"));
            }
        }    class Program
        {
            static void Main(string[] args)
            {
                zgh1s obj1=new zgh1s();            //以下迭代,按什么顺序输出呢?是不是以Add()的顺序呀
                //如果是按Add()的顺序,那么Add()的顺序保存在类的何处呢?
                //另外,这个类没有显式的定义 Ienumerable 接口呀。
                foreach(zgh1 tmp in obj1.zghs)
                {
                    Console.WriteLine(tmp);
                }
                Console.ReadLine();
            }
        }
    }
      

  4.   

    你的例子是List<T>集合,和你的类型没有任何关系...List<T>集合的元素顺序由内部索引维护...
      

  5.   

    List<T> 实现   Ienumerator
    是按添加的
      

  6.   

    你这么理解是不对的...List<T>集合自动维护内部索引,Add时确实是顺序分配索引号,但是还有Insert方法可以改变索引顺序...
      

  7.   

    List<T>集合 按添加的先后顺序
      

  8.   

    回去自己先去研究一下foreach 迭代器 就明白了
      

  9.   

    http://blog.csdn.net/virus026/archive/2008/01/23/2061999.aspx