Switch和Enum的那点事儿

来源:互联网 发布:c语言exit(0) 编辑:程序博客网 时间:2024/06/04 18:48

类之间传递参数调用方法时,当参数不同是,可以考虑用枚举做参数,被调用类中用switch……case判断调用
枚举
public enum BindType
{
    alarm,
    phone_location,
    phone_trace,
    machine_room,
    dili,
    machine_room_info,
    site,
    tousu
}
枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
枚举数可以具有重写默认值的初始值设定项。例如:
enum Days {Sat=100, Sun, Mon, Tue, Wed, Thu, Fri};
在此枚举中,强制元素序列从 100 而不是 0 开始。
获取枚举值:int x = (int)Days.Sun;

枚举长整型
enum Range :long {Max = 2147483648L, Min = 255L};
获取枚举值:long x = (long)Range.Max;

枚举也支持string类型,

 string tmp="a";
            switch (tmp)
            {
                case "a":
                    Console.WriteLine("a");
                    if (1 == 1)
                    {
                        Console.WriteLine("1==1");
                    }
                    break;
                case "b":
                    Console.WriteLine("b");
                    break;
            }
msdn上这样写的:
enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型都有基础类型,该类型可以是除 char 以外的任何整型。
枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。

enum在调用toString()时,结果为其名词的字符串
如BindType.phone_trace.toString():"phone_trace"

switch配合枚举使用:
 BindType tmpType=BindType.phone_trace;
            switch (tmpType)
            {
                case BindType.phone_trace:                   
                case BindType.alarm:
                    Console.WriteLine("alarm");
                    if (1 == 1)
                    {
                        Console.WriteLine("1==1");
                    }
                    break;
                case BindType.dili:
                    Console.WriteLine("dili");               
                    break;
      default:
                    Console.WriteLine("default");
                    break;
            }
switch语句中可以用枚举实现匹配
switch每个case中可以实现多行语句(可以跟if……else if……一样实现匹配,但效率要高(以前总以为只能处理单行,失误失误)),如BindType.alarm
另外case中有处理时,记得跟break,否则会报错;没有处理语句时,可以不用break,表示跟下面的处理方式相同

使用例子
A类中:
public enum BindType
{
    alarm,
    phone_location,
    phone_trace,
    machine_room,
    dili,
    machine_room_info,
    site,
    tousu
}

B类中使用:
public A.BindType bindType;
bindType=A.BindType.alarm;
console.writeline(bindType.toString())结果为:alarm