using System;
public enum Color
{
Red,
Green,
Blue
}
public class TestEnum
{
static void Main()
{
Color c = (Color)1; //(1)
Console.WriteLine(c);
Color c = (Color)5; //(2)
Console.WriteLine(c);
}
}
//由以上的强制类型转换在其背后究竟是什么决定了它能否转换成功
//如果说由枚举的基础类型取值范围决定从整形到枚举类型的强制转换是否能够成功的话:
问题:
//1.>那么将整数5转换为枚举类型当打印时为什么还会显示5呢?为什么不能打印枚举值呢?
//2.>在强制类型转换的背后,编译器究竟是怎样执行的呢?
//以上两点请您详细的给于答复,我的脑子反映有点慢!谢了。
你的例子和下面的是一样的:
public enum Color
{
Red=1,
Green=2,
Blue=3
}
其实枚举的值本身就是int的。
这个枚举通过自身的一个方法返回的就是int,所以转不转是一样的。
你也许编译过上面的代码(上面的代码通不过,下面的c要换个名字),发现为什么上面输出是Red而下面的是5,因为如下楼说的,Console.WriteLine方法调用了c.ToString(),因为1对应Red,所以输出了Red,而5没有对应,还是输出5。
枚举不是这样用的,要Console.WriteLine(Color.Red);这样用。你那样只是玩着把戏的用int
楼上正解,补充一句打印的时候tostring了。
楼上和楼上的楼上均为正解
都什么啊,这个是从C++就开始的东西,跟那个CLR毛关系没一个。要看也是要看枚举最后存储的到底是什么,而不是什么CLR