首页 > 代码库 > (20140708作业)编程的魅力在于:你不真的跳下去,永远不知道这个坑有多深!

(20140708作业)编程的魅力在于:你不真的跳下去,永远不知道这个坑有多深!

作业要求: 输出TypeCode枚举类内所有的值

 1     //获取枚举类型的值 2     //var V = Enum.GetValues(typeof(TypeCode));   3      4     //1、名称 5     Console.ForegroundColor = ConsoleColor.Yellow;                                           //设置颜色 6     Console.WriteLine("输出名称:");                                                         //提示 7     foreach (var name in Enum.GetNames(typeof(TypeCode)))                                 //循环 8         Console.WriteLine(name);                                                             //输出 9     Console.WriteLine("--------分割线---------");                                            //分割10     //2、编号11     Console.ForegroundColor = ConsoleColor.Green;                                             //设置颜色12     Console.WriteLine("输出编号:");                                                          //提示13     foreach (int num in Enum.GetValues(typeof(TypeCode)))                                     //循环 ② var14         Console.WriteLine(num);                                                               //输出15     Console.WriteLine("--------分割线---------");                                             //分割16     //倒序名称17     Console.ForegroundColor = ConsoleColor.Red;                                               //设置颜色18     var k = Enum.GetValues(typeof(TypeCode)).Length;                                          //提示19     for (int i = k; i >= 0; i--)                                                              //循环20     {21         Console.WriteLine(Enum.GetName(typeof(TypeCode), i));                                 //倒序输出22     }23     Console.Read();
View Code

枚举内容的输出在于 1 Enum.GetValues(typeof(TypeCode));  这句话

前两个是用foreach遍历出来的 
第一个直接getNames得到所有名称然后输出;
第二个用的是getValues这个比较有意,它得到是枚举, 但取决于遍历时候所声明的类型,也就是说 在注释②的位置 那里如果num的类型声明为var的话 那么num输出就是默认的枚举名称。如果是int 那么他输出的就是枚举的值,这点在第三个示例里可以看出;
第三个同样是getValues 当我直接赋值给var的时候,得到的就是整个枚举的Array集合。这里我取了个Length获取长度给k。接下来 坑爹的来了!

 

 

看上图 我是倒序循环输出的枚举值,有没有发现这里有个“坑”? 断开了! !!
我擦,吓尿,调试了几遍都是到这里会跳过去?! F12了一下TypeCode这个类,真相了!!!

 

看下面倒数第二行! KAO! 丫就没有17!!!想了好久也不知道为什么会这样?!

有知道的大神,帮个忙,本人学历不高,幼本毕业,求个通俗易懂的解释!拜谢!

 

 作业都交完,老大点评这次非常不满意,因为我们的作业并没有真正理解到枚举类型的含义。

他要告诉我们的是,枚举类型 是int的另一种表现形式。而非让我们输出一串结果。

1      /// <summary>2014-07-08</summary>2         public static void function质数()3         {4             for (int i = 0; i < 30; i++)5             {6                 Console.WriteLine((TypeCode)i);7             }8 9         }

 

这才是他想教给我们的。

 

编程的魅力在于:你不真的跳下去,永远不知道这个坑有多深!

实践出真知!