(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)))                                     //循环 ② var
14         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         }

这才是他想教给我们的。

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

实践出真知!

原文地址:https://www.cnblogs.com/Ex-Oj/p/3834864.html