我代码如下:
        enum Styles { Plaid = 0, Striped = 23, Tartan = 65, Corduroy = 78 };        public FormTestMessage()
        {
            InitializeComponent();
        }        private void btn_TestArray_Click(object sender, EventArgs e)
        {
            string[] arrEnum = Enum.GetNames( typeof(Styles) );
            Array arrEnum2 = Enum.GetValues( typeof(Styles) );
            Console.WriteLine("for *******************************");
            for (int i = 0; i < arrEnum.Length; i++)
            {
                Console.WriteLine("{0}, {1}, {2}", i, arrEnum.GetValue(i), arrEnum2.GetValue(i) );
            }            Console.WriteLine("foreach ****************************");
            foreach (int i in arrEnum2)
                Console.WriteLine(i);        }   /*
    输出:
for *******************************
0, Plaid, Plaid
1, Striped, Striped
2, Tartan, Tartan
3, Corduroy, Corduroy
foreach ****************************
0
23
65
78
   */
对于Enum.GetValues 解释为检索指定枚举中常数值的数组. 
为什么我用for就不能得到其常数值,而输出的是和GetName的值一样呢.
但为什么用foreach就能得到其常数值.
帮解决一下.谢谢!!

解决方案 »

  1.   

    把for代码改成如下即可
     for (int i = 0; i < arrEnum.Length; i++)
                {
                    Console.WriteLine("{0}, {1}, {2}", i, arrEnum.GetValue(i), (int)arrEnum2.GetValue(i) );
                }
      

  2.   


     string[] arrEnum = Enum.GetNames(typeof(Styles));
              
                int[] array=new int[arrEnum.Length];;
                Enum.GetValues(typeof(Styles)).CopyTo(array,0);
                Console.WriteLine("for *******************************");
                for (int i = 0; i < arrEnum.Length; i++)
                {
                    Console.WriteLine(array[i].ToString());
                }            Console.WriteLine("foreach ****************************");
                foreach (int i in arrEnum2)
                    Console.WriteLine(i);
                Console.ReadKey();
      

  3.   

    额,for循环里arrEnum2.GetValue(i)返回的是object,这里默认存储的是Styles.Plaid这样的格式的值,你可以跟踪一下看看,而foreach里面你用的是foreach (int i in arrEnum2) ,int i 也就是已经对enum类型进行了一个类型转换,只不过这个转换,你自己没有意识到,你可以把foreach (int i in arrEnum2)改成foreach (object i in arrEnum2)看看,foreach也就变成了默认的Styles.Plaid了.很多东西其实可以跟踪一下