c# 枚举(Enum)

C#枚举(Enum)小结

 

枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。

C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

声明 enum 变量

声明枚举的一般语法:

enum <enum_name>
{ 
    enumeration list 
};


其中,

  • enum_name 指定枚举的类型名称。
  • enumeration list 是一个用逗号分隔的标识符列表。

枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.例如:

enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };


实例
下面的实例演示了枚举变量的用法:

实例
using System;

public class EnumTest
{
    enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Day.Sun;
        int y = (int)Day.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}
当上面的代码被编译和执行时,它会产生下列结果:

Sun = 0
Fri = 5

 

 一个枚举的关联值或隐式地、或显示地被赋值。如果枚举成员的声明中具有 constant-expression 初始值设定项,则该常量表达式的值(它隐式转换为枚举的基础类型)就是该枚举成员的关联值。如果枚举成员的声明不具有初始值设定项,则它的关联值按下面规则隐式地设置:

  如果枚举成员是在枚举类型中声明的第一个枚举成员,则它的关联值为零。否则,枚举成员的关联值是通过将前一个枚举成员(按照文本顺序)的关联值加 1 得到的。这样增加后的值必须在该基础类型可表示的值范围内;否则,会出现编译时错误。有关枚举类型成员关联值赋值案例,参考下例:

using System;

namespace Test
{
    public enum Day : uint  //如果不设置数据类型,默认为 int
    { Mon=1,Tue=2,Wed=3,Thu=4,Fri=5,Sat,Sun}
    class EnumType
    {
        public static void Main(string[] args)
        {
            Console.WriteLine(ChooseDay(Day.Sun));
            Console.WriteLine(ChooseDay(Day.Mon));
        }
        static string ChooseDay(Day d)
        {
            string tmp = string.Empty;
            switch (d)
            { 
                case Day.Mon:
                    tmp = string.Format("你选择一周中的第{0}天(即周一),工作",(uint)d);
                    break;
                case Day.Tue:
                    tmp = string.Format("你选择一周中的第{0}天(即周二),工作", (uint)d);
                    break;
                case Day.Wed:
                    tmp = string.Format("你选择一周中的第{0}天(即周三),工作", (uint)d);
                    break;
                case Day.Thu:
                    tmp = string.Format("你选择一周中的第{0}天(即周四),工作", (uint)d);
                    break;
                case Day.Fri:
                    tmp = string.Format("你选择一周中的第{0}天(即周五),工作", (uint)d);
                    break;
                case Day.Sat:
                    tmp = string.Format("你选择一周中的第{0}天(即周六),休息", (uint)d);
                    break;
                case Day.Sun:
                    tmp = string.Format("你选择一周中的第{0}天(即周日),休息", (uint)d);
                    break;
                default:
                    tmp = "不合法";
                    break;
            }
            return tmp;
        }
    }
}
复制代码
//Execation Result

你选择一周中的第7天(即周日),休息
你选择一周中的第1天(即周一),工作
请按任意键继续. . .

 

 

调用枚举

    public enum CommunicationState
    {
        /// <summary>
        /// 位置状态
        /// </summary>
        Unknown = 0,
        /// <summary>
        /// 等待用户登录
        /// </summary>
        WaitforUser = 1,
        /// <summary>
        /// 等待用户输入密码
        /// </summary>
        WaitforPass = 2,
        /// <summary>
        /// 等待用户指令
        /// </summary>
        WaitforCmd = 3,
        /// <summary>
        /// 接收数据中
        /// </summary>
        Receiving = 4,
        /// <summary>
        /// 断开连接
        /// </summary>
        Disconnected = 5
    }



  private CommunicationState m_ComState = CommunicationState.Unknown;

  this.m_ComState = CommunicationState.WaitforUser;

 

posted on 2019-10-09 09:28  michellexiaoqi  阅读(2113)  评论(0编辑  收藏  举报