转http://www.cnblogs.com/rene1018/archive/2009/03/17/1414658.html
一、 定义
1、每个枚举成员均具有相关联的常数值。此值的类型就是包含了它的那个枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。示例
enum Color: uint
{ Red = -1, Green = -2, Blue = -3 }
产生编译时错误,原因是常数值 -1、-2 和 –3 不在基础整型 uint 的范围内。
2、枚举默认类型是int,从0开始
3、多个枚举成员可以共享同一个关联值。示例
enum Color
{ Red, Green, Blue, Max = Blue }
显示一个枚举,其中的两个枚举成员(Blue 和 Max)具有相同的关联值。
4、一个枚举成员的关联值或隐式地、或显式地被赋值。如果枚举成员的声明中具有“常数表达式”初始值设定项,则该常数表达式的值(它隐式转换为枚举的基础类型)就是该枚举成员的关联值。如果枚举成员的声明不具有初始值设定项,则它的关联值按下面规则隐式地设置:
5、如果枚举成员是在枚举类型中声明的第一个枚举成员,则它的关联值为零。 否则,枚举成员的关联值是通过将前一个枚举成员(按照文本顺序)的关联值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。
示例
using System;
enum Color
{ Red, Green = 10, Blue }
则:Red = 0 Green = 10 Blue = 11
原因如下:
枚举成员 Red 被自动赋予零值(因为它不具有初始值设定项并且是第一个枚举成员)。
枚举成员 Green 被显式赋予值 10。
枚举成员 Blue 被自动赋予比文本上位于它前面的成员大 1 的值。
6、枚举成员的关联值不能直接或间接地使用它自己的关联枚举成员的值。除了这个循环性限制外,枚举成员初始值设定项可以自由地引用其他的枚举成员初始值设定项,而不必考虑它们所在的文本位置的排列顺序。在枚举成员初始值设定项内,其他枚举成员的值始终被视为属于所对应的基础类型,因此在引用其他枚举成员时,没有必要使用强制转换。
示例
enum Circular
{ A = B, B }
产生编译时错误,因为 A 和 B 的声明是循环的。A 显式依赖于 B,而 B 隐式依赖于 A。
7、枚举成员的命名方式和作用范围与类中的字段完全类似。枚举成员的范围是包含了它的枚举类型的体。在该范围内,枚举成员可以用它们的简单名称引用。在所有其他代码中,枚举成员的名称必须用它的枚举类型的名称限定。枚举成员不具有任何声明可访问性,如果一个枚举类型是可访问的,则它所含的所有枚举成员都是可访问的。
二、 转换
1、 枚举转常数
(int)Color.Red = 0
(int)Color.Green = 10
2、 常数转枚举
Color mycolor = (Color)0
3、 根据常数取枚举名
综合2和4
或者
Enum.GetName(typeof(Color),0)) = ”Red”
Enum.GetName(typeof(Color),10)) = ”Green”
4、 枚举转字符串
Color.Red.ToString() = ”Red”
5、 字符串转枚举
String str = “Red”
Color mycolor = (Color)Enum.Parse(typeof(Color),str,false)