关于枚举
来源:互联网 发布:职业证书报考网站域名 编辑:程序博客网 时间:2024/06/01 17:34
今天想写一下关于枚举的文章,脑海里的思路有限,所以上网找博文来看,发现的一位大牛的作品,甚喜,http://www.cnblogs.com/allenlooplee/archive/2004/12/19/70230.aspx
如此水平我等晚辈实在佩服,很多东西只有自己总结过才会变成自己的,现在我把自己的薄见总结一下(有些是引用传智播客上的ppt)。
枚举关键字 enum 用法非常简单
enum season { spring, summer, autumn, winter }
Console.WriteLine((int)season.spring); Console.WriteLine((int)season.spring,season.spring);
打印出来是0和spring,也就说season其实就是一个简单的数值类型,我们可以看下il代码
.class auto ansi sealed nested private season extends [mscorlib]System.Enum { .field public static literal valuetype 枚举.Program/season autumn = int32(2) .field public static literal valuetype 枚举.Program/season spring = int32(0) .field public static literal valuetype 枚举.Program/season summer = int32(1) .field public specialname rtspecialname int32 value__ .field public static literal valuetype 枚举.Program/season winter = int32(3) }
枚举也可以手动赋值
enum season { spring=2, summer=3, autumn=1, winter }
其对应的il代码
.class auto ansi sealed nested private season extends [mscorlib]System.Enum { .field public static literal valuetype 枚举.Program/season autumn = int32(1) .field public static literal valuetype 枚举.Program/season spring = int32(2) .field public static literal valuetype 枚举.Program/season summer = int32(3) .field public specialname rtspecialname int32 value__ .field public static literal valuetype 枚举.Program/season winter = int32(2) }
大家应该有注意到value_这个字段,我们看一下大牛如何说的
引用:
标志枚举 (当可以具有多个状态时,普通枚举就不够用了(状态可以组合))
FileAttributes,普通枚举中的每个值是互斥的,而标志枚举中每个值是可以互相组合的。
[Flags]//看加Flags特性后,标志枚举的ToString()返回结果
public enum GoodPeople
{
高 = 1,
富 = 2,
帅 = 4,
白 = 8,
美 = 16,
优秀男 = GoodPeople.高 | GoodPeople.富 | GoodPeople.帅,
优秀女 = GoodPeople.白 | GoodPeople.富 | GoodPeople.美
}
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举
- 关于枚举的种种
- 关于枚举类型
- 关于枚举的使用
- 关于反射和枚举
- 关于java枚举
- 关于枚举窗口
- 关于枚举enum
- 关于 PHP 枚举数组
- SQL-关于球队胜负的问题
- No result defined for Action and result failure
- PHP图像处理 图像类型 PHP 图形工作
- 在Ruby On Rails项目中使用Redis做缓存数据库
- linux命令 find
- 关于枚举
- NameNode和DataNode启动
- java 异常机制
- OUC——1580(贪心)
- Rabbitmq教程翻译(三)Publish/Subscribe
- ubuntu下的ccache的使用
- OpenGLES与IOS编程
- SQL语句记录
- 【Linux基础】wait和waitpid函数
public static void Main(string[] args)
{
long x =(long)Range.max;
long y=(long)Range.min;
Console.WriteLine("max={0}",x);
Console.WriteLine("min={0}",y);
枚举类型中的Range.max;Range.min;已经是long型的了
为什么还要强制转化如 long y=(long)Range.min;
“enum Range : long”中的 long 指定了枚举的底层类型(Underlying Type),即 Range 内部的 value_ 的类型。C# 允许你手动为 Range 的成员赋值,但该值必须与底层类型兼容,而这些值将会由编译器隐式转换为 Range,这一转换的实质是把对应的值赋予 Range 内部的 value_。也就是说 Range.max 并不是 long 而是 Range,这样的话,要从 Range.max 中取出内部的 value_ 的值,你就必须使用强制转换/显式转换,当然,目标类型必须是 Range 的底层类型或其兼容类型。