一提起枚举,我想各位是熟悉得无法形容的了。枚举有啥用?枚举就是用来对一系列可选值进行规范。
举个例子说,
定义一个关于厕所的枚举,通常我们见到的厕所有男厕,女厕,或者狗厕。是吧,估计你走在大街上很少看到有龟厕的吧。因此,为了让使用我们代码的人能有一个规范供他参考,于是我们会把男厕、女厕和狗厕三种可选项定义在一个枚举类型“厕所”中。
再比如,我们在开发一个下象棋的应用程序时,在开始时对阵双方要选一方模子,而我们有效的选项是红方或黑方(有的是红方和绿方),为了防止有的玩家选到了白方,蓝方之类不符合规范的颜色,我们就可以定义一个枚举来限定之。
介绍
枚举是一个指定的常数,其基础类型可以是除 Char 外的任何整型。
如果没有显式声明基础类型,则使用 Int32。
编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。
定义
默认基数从O开始,也可指定数值。
enum Days { Saturday = 1 , Sunday, Monday, Tuesday, Wednesday, Thursday, Friday } ;
enum Colors { Red = 1 , Green = 2 , Blue = 4 , Yellow = 8 } ;
使用
Colors myColors = Colors.Red;
string strColor = myColors.tostring();
int IntColor = ( int )myColors ;
位或
Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow;
位与
Colors myColors = Colors.Red & Colors.Blue & Colors.Yellow;
遍历
foreach ( string s in Enum.GetNames( typeof (Days)))
Response.Write(s + " -- " + Enum.Parse( typeof (Days), s).ToString());
转换
Colors mc = Colors Enum.Parse( typeof (Colors ), " red " );
if (System.Enum.IsDefined( typeof (Days), " Monday " ))
Days ds = (Days)Enum.Parse( typeof (Days), " Monday " );
实例二:
public enum NoticeType
{
Notice = ' A ' ,
LabRule = ' H ' ,
HotInformation = ' N ' ,
Column = ' C ' ,
All = ' 1 ' ,
Null = ' 0 '
}
// 新建枚举类型
NoticeType noticeType1 = NoticeType.Column;
// 把枚举类型转换为string d="Column"
string d = noticeType1.ToString();
// 取得枚举类型的基数 dd='C'
char dd = ( char )noticeType1;
// 通过基数取得对应的枚举类型 noticeType2 = NoticeType.Notice
// (NoticeType)'A'; 两种方式都可以
NoticeType noticeType2 = (NoticeType)Char.Parse( " A " );
// 通过名称取得枚举类型 noticeType3 = NoticeType.Notice
NoticeType noticeType3 = (NoticeType)Enum.Parse( typeof (NoticeType), " Notice " );
先说枚举的第一件私事——Enum.GetNames方法。
这个方法可以把指定枚举的所有成员的名字返回到一个字符串数组中。比如我们有一个枚举:
enum rencai { 白痴, 奇才, 鬼才 };
于是执行Enum.GetNames( typeof( rencai ) ) 后会返回一个字符串数组,这个字符串数组就包含:白痴,奇才,鬼才三个元素。
这个方法对于用来把枚举的成员绑定到一个列表框,或者一个下拉列表框时比较实用。
枚举的第二件私房事——Parse或TryParse
这个和int.Parse差不多,可以把表示枚举成员的名称的字符串转化为指定枚举类型的对应的值。
如上面的人才枚举,如果把 “白痴”传给Parse方法,这样就可以返回一个表示白痴的枚举值。
简单示例
下面我举一个人类历史上最简单的例子。
这是一个WinForm程序,我定义了一个表示性别的枚举,它包含三个值,表示三种性别:
enum Gender { 男, 女, 人妖 }
然后,在程序运行时,用GetNames方法把Gender枚举的所有成员的名字取出来,绑定到ComboBox中,这样下拉列表中就限定了这三个选项了。
// 将可用的效值枚举值放到ComboBox中
var items = Enum.GetNames(typeof(Gender));
this.comboBox1.DataSource = items;
然后在单击按钮后,用Parse方法从ComboBox选择项的字符串中转换成Gender的指定的值了。
private void button1_Click(object sender, EventArgs e)
{
if (this.comboBox1.SelectedIndex == -1)
{
return;
}
string enumItem = this.comboBox1.SelectedItem as string;
if (!string.IsNullOrEmpty(enumItem))
{
Gender gd = (Gender)Enum.Parse(typeof(Gender), enumItem);
switch (gd)
{
case Gender.男:
this.textBox1.Text = "您是一位帅哥。";
break;
case Gender.女:
this.textBox1.Text = "你是一位美女。";
break;
case Gender.人妖:
this.textBox1.Text = "发现未知物种。";
break;
default:
break;
}
}
}
今天说的内容不多,不过应该还较为实用的。