• C#枚举 方法应用示例

    2015-09-06 14:39:33
    C#枚举 一、在学习枚举之前,首先来听听枚举的优点。  1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。  2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。  3、枚举使代码...
    
    

    一、在学习枚举之前,首先来听听枚举的优点。

      1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。

      2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。

      3、枚举使代码更易输入。

    二、枚举说明

      1、简单枚举

    • 枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。
    • 枚举是值类型,隐式继承自System.Enum,不能手动修改。System.Enum本身是引用类型,继承自System.ValueType。
    • 枚举都是隐式密封的,不允许作为基类派生子类。
    • 枚举类型的枚举成员均为静态,且默认为Int32类型。
    • 每个枚举成员均具有相关联的常数值。此值的类型就是枚举的底层数据类型。每个枚举成员的常数值必须在该枚举的底层数据类型的范围之内。如果没有明确指定底层数据类型则默认的数据类型是int类型。
    • 枚举成员不能相同,但枚举的值可以相同。
    • 枚举最后一个成员的逗号和大括号后面的分号可以省略

      C#提供类一个类来方便操作枚举,下面给出这个类的常用方法:

    方法 名称
    CompareTo 将此实例与指定对象进行比较并返回一个对二者的相对值的指示
    Equals 指示此实例是否等于指定的对象
    Format 根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式
    GetName 在指定枚举中检索具有指定值的常数的名称
    GetNames 检索指定枚举中常数名称的数组
    GetTypeCode  返回此实例的基础 TypeCode
    GetUnderlyingType 返回指定枚举的基础类型
    GetValues 索指定枚举中常数值的数组
    HasFlag 确定当前实例中是否设置了一个或多个位域
    IsDefined 返回指定枚举中是否存在具有指定值的常数的指示
    Parse 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 一个参数指定该操作是否不区分大小写
    TryParse 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 用于指示转换是否成功的返回值

     

      要显示指定枚举的底层数据类型很简单,只需在声明枚举的时候加个冒号,后面紧跟要指定的数据类型。

        enum sex : byte  //显示指定枚举的底层数据类型
        { 
            male,
            female,  //此逗号可以省略
        };        //此分号可以省略

      显式设置枚举的成员常量值,默认是从0开始,逐个递增的。但是以下例子却设置成了1,2,3,4,5,6,7,0。而且成员值可以一样的。

    复制代码
        enum Week
        { 
            Monday = 1,
            Tuesday = 2,
            Wednesday = 3,
            Sunday = 0,
         Everyday = 1  //成员的值可以设置成一样的,但是成员不行
        }
      Console.WriteLine((int)Week.Monday);  //获取值
    复制代码

      示例,由枚举值获取枚举名称与由枚举名称获取枚举值

    复制代码
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(Enum.GetName(typeof(Man),1));  //还是 刘备 (由值获取名字)
    
                string[] array1 = Enum.GetNames(typeof(Man));
                Console.WriteLine(array1[1]);   //关羽
    
                Array array2 = Enum.GetValues(typeof(Man));
                Console.WriteLine(array2.GetValue(1));  //还是关羽
    
                Type t = Enum.GetUnderlyingType(typeof(Man));
                Console.WriteLine(t);       //输出 Int32
    
                //由值获取内容
                int i = 1;
                string Name = Enum.Parse(typeof(Man), i.ToString()).ToString();     //此时 Name="刘备"
                Console.WriteLine(Name);
    
                //由值获取内容
                string Name2 = "关羽";
                int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2));     //此时 j=2
                Console.WriteLine(j);
    
                Console.ReadKey();
            }
        }
    
        enum Man
        { 
            刘备 = 1,
            关羽 = 2,
            张飞 = 3
        }
    复制代码

     

      2、标志枚举

      标志枚举要在顶部加[System.Flags]特性进行声明。而且枚举支持组合运算。先来看个例子

    复制代码
        class Program
        {
            static void Main(string[] args)
            {
                var man = Week.白 | Week.美;  //赋值为101    计算方法001或上100,结果是101
                Console.WriteLine((int)man);
                if ((man & Week.白) == Week.白)       //101 man 
                {                                    //001 白 逐位相与,
                    Console.WriteLine("此人白");      //001 如果结果是白,就可以反推出man包含 白
                }
                else
                {
                    Console.WriteLine("此人黑");
                }
                Console.ReadKey();
            }
        }
    
        [System.Flags]
        public enum Week
        { 
            白 = 1,  //001
            富 = 2,  //010
            美 = 4,  //100
        }
    复制代码

      这种位运算是非常有用的,在sql语句里也支持位运算。也就是说,把一个枚举运算后的结果存入数据库之后,还能够按照你的要求读取出来。比如:

      将一个"白美"存如数据库的值存入数据库,那么存入去的就是整型5。

      那么我想读出所有的"白"数据列表怎么读呢?白,可以是纯白"1",也是是白富3,可以是白美5,也可以是白富美7,你可以用in来读,但是更好的方法是在sql语句中同样使用位运算。

    select * from Table1 where Tag & 1 = 1  //Tag是列名
    
    select * from Table1 where  Tag | 1 = Tag

     

    三、枚举的使用建议

      当参数、返回值、变量等类型可以使枚举,尽量使用枚举(要注意考虑分类的稳定性)

      大多数情况下都可以使用int类型枚举,下列情况除外。

      枚举可能被大量频繁的使用,这时为了节约空间可以使用小于int类型的枚举。

      标志枚举,且标志多于32个。

      下面写一个:枚举绑定MVC3下拉列表的示例:

      控制器代码:

    复制代码
    namespace MvcStart.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult GetSexList()
            {
                Dictionary<string, int> Sexlist = new Dictionary<string, int>();
                string[] keys = Enum.GetNames(typeof(sex));
                Array values = Enum.GetValues(typeof(sex));
    
                for (int i = 0; i < keys.Length; i++)
                {
                    Sexlist.Add(keys[i], (int)values.GetValue(i));
                }
    
                return View(Sexlist);
            }
        }
    
        public enum sex
        { 
            male = 1,
            female = 2,
            other = 3
        }
    }
    复制代码

    视图代码:

    复制代码
    @model Dictionary<string, int>
    <select>
        @foreach(var item in @Model)
        {
            <option value="@item.Value">@item.Key</option>
        }
    </select>
    复制代码

      生成的HTML代码:

    <select>
            <option value="1">male</option>
            <option value="2">female</option>
            <option value="3">other</option>
    </select>

       再来一个例子,获取枚举描述

    复制代码
    public static class GetDescription
        {
            /// <summary>
            /// 获取描述信息
            /// </summary>
            /// <param name="en"></param>
            /// <returns></returns>
            public static string description(this Enum en)
            {
                Type type = en.GetType();
                MemberInfo[] memInfo = type.GetMember(en.ToString());
                if (memInfo != null && memInfo.Length > 0)
                {
                    object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
                    if (attrs != null && attrs.Length > 0)
                        return ((DescriptionAttribute)attrs[0]).Description;
                }
                return en.ToString();
            }
        }
    
        public enum Sex
        {
            [Description("")]
            man = 1,
            [Description("")]
            woman = 2,
            [Description("其他")]
            other = 3
        }
    复制代码
    展开全文
  • C# 枚举的使用

    2016-07-19 22:28:36
    一、在学习枚举之前,首先来听听枚举的优点。  1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。  2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。  3、枚举使代码更易输入...

    原文地址:

    http://www.cnblogs.com/kissdodog/archive/2013/01/16/2863515.html

    一、在学习枚举之前,首先来听听枚举的优点。

      1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。

      2、枚举使代码更易于维护,有助于确保给变量指定合法的、期望的值。

      3、枚举使代码更易输入。

    二、枚举说明

      1、简单枚举

    • 枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。
    • 枚举是值类型,隐式继承自System.Enum,不能手动修改。System.Enum本身是引用类型,继承自System.ValueType。
    • 枚举都是隐式密封的,不允许作为基类派生子类。
    • 枚举类型的枚举成员均为静态,且默认为Int32类型。
    • 每个枚举成员均具有相关联的常数值。此值的类型就是枚举的底层数据类型。每个枚举成员的常数值必须在该枚举的底层数据类型的范围之内。如果没有明确指定底层数据类型则默认的数据类型是int类型。
    • 枚举成员不能相同,但枚举的值可以相同。
    • 枚举最后一个成员的逗号和大括号后面的分号可以省略

      C#提供类一个类来方便操作枚举,下面给出这个类的常用方法:

    方法 名称
    CompareTo 将此实例与指定对象进行比较并返回一个对二者的相对值的指示
    Equals 指示此实例是否等于指定的对象
    Format 根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式
    GetName 在指定枚举中检索具有指定值的常数的名称
    GetNames 检索指定枚举中常数名称的数组
    GetTypeCode  返回此实例的基础 TypeCode
    GetUnderlyingType 返回指定枚举的基础类型
    GetValues 索指定枚举中常数值的数组
    HasFlag 确定当前实例中是否设置了一个或多个位域
    IsDefined 返回指定枚举中是否存在具有指定值的常数的指示
    Parse 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 一个参数指定该操作是否不区分大小写
    TryParse 将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 用于指示转换是否成功的返回值

     

      要显示指定枚举的底层数据类型很简单,只需在声明枚举的时候加个冒号,后面紧跟要指定的数据类型。

        enum sex : byte  //显示指定枚举的底层数据类型
        { 
            male,
            female,  //此逗号可以省略
        };        //此分号可以省略

      显式设置枚举的成员常量值,默认是从0开始,逐个递增的。但是以下例子却设置成了1,2,3,4,5,6,7,0。而且成员值可以一样的。

    复制代码
        enum Week
        { 
            Monday = 1,
            Tuesday = 2,
            Wednesday = 3,
            Sunday = 0,
         Everyday = 1  //成员的值可以设置成一样的,但是成员不行
        }
      Console.WriteLine((int)Week.Monday);  //获取值
    复制代码

      示例,由枚举值获取枚举名称与由枚举名称获取枚举值

    复制代码
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(Enum.GetName(typeof(Man),1));  //还是 刘备 (由值获取名字)
    
                string[] array1 = Enum.GetNames(typeof(Man));
                Console.WriteLine(array1[1]);   //关羽
    
                Array array2 = Enum.GetValues(typeof(Man));
                Console.WriteLine(array2.GetValue(1));  //还是关羽
    
                Type t = Enum.GetUnderlyingType(typeof(Man));
                Console.WriteLine(t);       //输出 Int32
    
                //由值获取内容
                int i = 1;
                string Name = Enum.Parse(typeof(Man), i.ToString()).ToString();     //此时 Name="刘备"
                Console.WriteLine(Name);
    
                //由值获取内容
                string Name2 = "关羽";
                int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2));     //此时 j=2
                Console.WriteLine(j);
    
                Console.ReadKey();
            }
        }
    
        enum Man
        { 
            刘备 = 1,
            关羽 = 2,
            张飞 = 3
        }
    复制代码

     

      2、标志枚举

      标志枚举要在顶部加[System.Flags]特性进行声明。而且枚举支持组合运算。先来看个例子

    复制代码
        class Program
        {
            static void Main(string[] args)
            {
                var man = Week.白 | Week.美;  //赋值为101    计算方法001或上100,结果是101
                Console.WriteLine((int)man);
                if ((man & Week.白) == Week.白)       //101 man 
                {                                    //001 白 逐位相与,
                    Console.WriteLine("此人白");      //001 如果结果是白,就可以反推出man包含 白
                }
                else
                {
                    Console.WriteLine("此人黑");
                }
                Console.ReadKey();
            }
        }
    
        [System.Flags]
        public enum Week
        { 
            白 = 1,  //001
            富 = 2,  //010
            美 = 4,  //100
        }
    复制代码

      这种位运算是非常有用的,在sql语句里也支持位运算。也就是说,把一个枚举运算后的结果存入数据库之后,还能够按照你的要求读取出来。比如:

      将一个"白美"存如数据库的值存入数据库,那么存入去的就是整型5。

      那么我想读出所有的"白"数据列表怎么读呢?白,可以是纯白"1",也是是白富3,可以是白美5,也可以是白富美7,你可以用in来读,但是更好的方法是在sql语句中同样使用位运算。

    select * from Table1 where Tag & 1 = 1  //Tag是列名
    
    select * from Table1 where  Tag | 1 = Tag

     

    三、枚举的使用建议

      当参数、返回值、变量等类型可以使枚举,尽量使用枚举(要注意考虑分类的稳定性)

      大多数情况下都可以使用int类型枚举,下列情况除外。

      枚举可能被大量频繁的使用,这时为了节约空间可以使用小于int类型的枚举。

      标志枚举,且标志多于32个。

      下面写一个:枚举绑定MVC3下拉列表的示例:

      控制器代码:

    复制代码
    namespace MvcStart.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult GetSexList()
            {
                Dictionary<string, int> Sexlist = new Dictionary<string, int>();
                string[] keys = Enum.GetNames(typeof(sex));
                Array values = Enum.GetValues(typeof(sex));
    
                for (int i = 0; i < keys.Length; i++)
                {
                    Sexlist.Add(keys[i], (int)values.GetValue(i));
                }
    
                return View(Sexlist);
            }
        }
    
        public enum sex
        { 
            male = 1,
            female = 2,
            other = 3
        }
    }
    复制代码

    视图代码:

    复制代码
    @model Dictionary<string, int>
    <select>
        @foreach(var item in @Model)
        {
            <option value="@item.Value">@item.Key</option>
        }
    </select>
    复制代码

      生成的HTML代码:

    <select>
            <option value="1">male</option>
            <option value="2">female</option>
            <option value="3">other</option>
    </select>

       再来一个例子,获取枚举描述

    复制代码
    public static class GetDescription
        {
            /// <summary>
            /// 获取描述信息
            /// </summary>
            /// <param name="en"></param>
            /// <returns></returns>
            public static string description(this Enum en)
            {
                Type type = en.GetType();
                MemberInfo[] memInfo = type.GetMember(en.ToString());
                if (memInfo != null && memInfo.Length > 0)
                {
                    object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
                    if (attrs != null && attrs.Length > 0)
                        return ((DescriptionAttribute)attrs[0]).Description;
                }
                return en.ToString();
            }
        }
    
        public enum Sex
        {
            [Description("")]
            man = 1,
            [Description("")]
            woman = 2,
            [Description("其他")]
            other = 3
        }
    复制代码
    展开全文
  • C#中的枚举和结构体

    2020-05-28 14:07:19
    枚举: 1.枚举的声明 用enum关键字修饰,加枚举名 enum枚举名 { 值1, 值2, 值3, ```` } 2.什么时候使用枚举 在确定值的数量和值的时候使用枚举,规范程序的开发 3.枚举的赋值 枚举名变量名...
       枚举:
         1.枚举的声明
          用enum关键字修饰,加枚举名
        enum 枚举名
        {
          值1,
          值2,
          值3,
          ````
        }
         2.什么时候使用枚举
             在确定值的数量和值的时候使用枚举,规范程序的开发
     
        3.枚举的赋值
            枚举名 变量名=枚举名.值;
            Day nowDay = Day.星期一;
     
    结构体:
                结构体的声明 用struct关键字修饰,加结构体名
    结构体的使用:
        结构体中可以存储不同类型的数据,一般都是每个个体共同拥有一些属性时使用结构体
        struct Student
        {
          变量类型 变量名;
          变量类型 变量名;
        }
     
        结构体中的方法:
              结构体中的方法
                  <1>如果方法是静态的那么不能使用结构体中非静态的属性
                  <2>如果方法是非静态的那么可以使结构体中的静态和非静态的属性
                  <3>调用静态方法需要用  "结构体名.方法名" 来调用,非静态方法直接用变量名调用
                  <4>调用静态属性需要用  "结构体名.属性名" 来调用,非静态属性直接用变量名调用
                  
     
        
     
    代码示例
     
    using System;
    using System.Reflection;
    namespace 第十章枚举和结构体
    {
    #region 枚举
       
        //枚举的声明  用enum关键字修饰,加枚举名
        //枚举类型中默认存储的是int类型的,并且后面的值总是前一个值加一;
        enum Day : int   //枚举名后面可以加上限制,但是限制的类型只能是整形 int ,long ,short 等;
        {
            星期一 =0,
            星期二 =1, //枚举中的值可以通过等号改变
            星期三,
            星期四,
            星期五,
            星期六,
            星期日
        }
        #endregion
    #region 结构体
       
        //结构体的声明 用struct关键字修饰,加结构体名
        //结构体中可以存储不同类型的数据,一般都是
        struct Student
        {
            public string name;
            public  Xingb xingbie;  //结构体可以和枚举连用
            public  int  age;
            public  string banji;
            public bool youden;
        }
        enum Xingb
        {
            男,
            女
        }
      
        #endregion
        class Program
        {
         #region 结构体中的方法
            //定义一个结构体
            struct Teacher
            {
                public static string name;
                public int age;
                //非静态方法可以使用静态的属性
                public void Jieshao()
                {
                    Console.WriteLine("你好,我是:"+name+"我今年"+age);
                }
                //静态方法方法中不能使用非静态的属性
                public static void Kecheng()
                {
                    Console.WriteLine("我教你们语文课程"+name);
                }
            }
            #endregion
            static void Main(string[] args)
            {
    #region 枚举
              
                //小飞经常出去旅游,但是每次出去对日期总是很纠结,
                //用使用枚举帮小飞随机选择出去旅游的日子
                Random _ran = new Random();
                //因为枚举时从0开始,后面是前面数字加1,所以取值为 0到7,但不包括7.
                int _numDay = _ran.Next(0,7);
               
         #region 枚举与int类型的相互转换
                Day nowDay = Day.星期一;
                //枚举类型可以转换成int类型
                int num = (int)nowDay;
                //因为枚举类型默认是整数类型,并且第一个值从0开始,所以星期一转换成int 类型值就是0
                Console.WriteLine(num);
                //int转换为枚举类型(在这我们用随机数来确定小飞的出游时间)
                Day _nowDay1 = (Day)_numDay; //int转换枚举时要注意枚举中的值是否存在
                //打印小飞出游的时间
                Console.WriteLine(_nowDay1 );
                #endregion
         #region 枚举类型与string类型之间的转换
                //将枚举转换成字符串
                Day strDay = Day.星期三;
                //枚举可以使用.ToString();方法
                string _strDay1 = strDay.ToString();
                Console.WriteLine(_strDay1);
                //将string类型转换为枚举
                //在这我们用上面的随机数,先将随机数转换为string,方便学习string转换为枚举
                string _strDay2 = _numDay.ToString();
                //string中有个Parse方法可以将string转换为枚举
                                //  该方法需要两个参数,一个是类型,一个是string类型的变量
                                 //我们需要获取这个枚举类型 这里使用 typeof(类型)方法获取枚举类型
                                 //后面的代码只是将类型转换为枚举,但是我们需要转换为Day类型使用
                                 //所以加了一个强转
                Day str3NowDay = (Day)Enum.Parse(typeof(Day),_strDay2);
                //上面代码中的字符串可以是枚举中的字符串值 如"星期一",如果字符串是数字值,枚举中没有
                //该数字值那么不会报错,但是如果是 "星期一"这种类型的值,枚举中没有的话会报异常
                //打印出的结果跟上述一样
                Console.WriteLine(str3NowDay);
                #endregion
                #endregion
    #region 结构体
                //使用结构体首先要声明一个结构体类型
                Student stu1;
                //为结构体赋值,在结构体外赋值结构体中的变量必须是 Public(公开的)修饰的
                stu1.name = "张三";
                stu1.age = 16;
                stu1.xingbie = Xingb.男;
                stu1.banji = "六年级一班";
                stu1.youden = false;
                Student stu2;
                stu2.name = "李红";
                stu2.age = 15;
                stu2.xingbie = Xingb.女;
                stu2.banji = "六年级一班";
                stu2.youden = true;
                //打印李红的信息
                Console.WriteLine("姓名:"+ stu2.name+"\n年龄:" +
                          ""+ stu2.age+"\n性别:"+ stu2.xingbie+"\n优等生:"
                          + stu2.youden+"\n班级:"+ stu2.banji);
         #region 结构体中方法的使用
                Teacher ter1;
                //静态属性和静态方法一样都需要用结构体名调用
                Teacher.name = "杨雪";
                //非静态属性和方法直接使用变量名调用
                ter1.age = 21;
                ter1.Jieshao();
                Teacher.Kecheng();
                #endregion
                #endregion
            }
        }
    }
     
     
     
     
     
    展开全文
  • C# 枚举

    2017-10-26 20:50:41
    枚举是一组命名整型常量。枚举类型是使用enum关键字声明的。 C#枚举是值数据类型。换句话说,枚举包含自己的值,且不能继承或传递继承。
    枚举是一组命名整型常量。枚举类型是使用enum关键字声明的。
    C#枚举是值数据类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

    声明enum变量
    声明枚举的一般语法:
        enum <enum_name>
        {
            enumeration list
    
        };

    其中:
    -enum_name指定枚举类型的名称
    -enumeration list是一个用逗号隔开的标识符列表
    枚举列表中的每个符号代表一个整数值,一个比它前面的符号打得整数值。默认情况下,第一个枚举符号的值是0,例如
    enum Days = {Sun,Mon,Tue,End,Thu,Fri,Sat};

    实例:
    下面的例子演示了枚举变量的用法:
    using System
    namespace EnumApplication
    {
        class EnumProgram
        {
            enum Days = {Sun,Mon,Tue,End,Thu,Fri,Sat};
    
            staic void Main(string[] args){
                int day = (int)Days.Sun;
                Console.WriteLine("Todday:{0}",day);
                Console.ReadyKey();
            }
       


    展开全文
  • 开发工具与关键技术:Visual Studio 2017 作者:邓崇富 撰写时间:2019 年 6 月 25 日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...在声明一个枚举时,要指定该枚举的实例可以包含的一组可接受的值。不...

    开发工具与关键技术:Visual Studio 2017

    作者:邓崇富

    撰写时间:2019 年 6 月 25 日

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    枚举:

       枚举是用户定义的整数类。在声明一个枚举时,要指定该枚举的实例可以包含的一组可接受的值。不仅如此,还可以给值指定易于记忆的名称。如果代码的某个地方,要试图把一个在可以接受范围内的值赋予枚举的一个实例,编译器就会报告一个错误。

    从长远来看,创建枚举可以节省大量的时间,减少许多麻烦。使用枚举比使用无格式的整数至少有如下3个优点:

    1. 枚举可以是代码更易于维护,有助于确保给变量指定合法的、期望的值。
    2. 枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊、变化多端的数来表示。
    3. 枚举也可以使代码更易于输入。在给枚举类型的实例赋值时,Visual Studio.NET IDE会通过IntelliSense弹出一个包含可接受值得列表框,减少了按键次数,可以定义如下得枚举:

             public enum TimeOfDay

            {

                Morning = 0,

                Afternoon = 1,

                Evening = 2

            }

    本例在枚举中使用一个整数值,来表示一天的每个阶段。现在可以把这些值作为枚举的成员来访问。例如,TimeOfDay.Moming返回数字0。使用这个枚举一般是把合适的值传送给方法,并在switch语句中迭代可能的值。详细代码如下:

           class EnumExample

            {

                public static int Main()

                {

                    WriteGreeting(TimeOfDay.Morning);

                    return 0;

                }

                static void WriteGreeting(TimeOfDay timeOfDay)

                {

                    switch (timeOfDay)

                    {

                        case TimeOfDay.Morning:

                            Console.WriteLine("Good Morning!");

                            break;

                        case TimeOfDay.Afternoon:

                            Console.WriteLine("Good afternoon!");

                            break;

                        case TimeOfDay.Evening:

                            Console.WriteLine("Good evening!");

                            break;

                        default:

                            Console.WriteLine("Hello!");

                            break;

                    }

                }

            }

    在C#中,枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构。这表示可以对它们调用方法,执行有用的任务。注意因为.NET Framework的执行方式,在语法上把枚举当作结构不会造成性能损失,实际上,一旦代码编译好,枚举就成为基本类型,与int和float类似。

    可以获取枚举的字符串表示,例如使用前面的TimeOfDay枚举:

     TimeOfDay time = TimeOfDay.Afternoon;

             Console.WriteLine(time.ToString());

    会返回字符串Afternoon。

    另外,还可以从字符串中获取枚举值:

    TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay), "afternoon", true);

              Console.WriteLine((int)time2);

    这段代码说明了如何从字符串获取枚举值,并转换为整数。要从字符串中转换,需要使用静态的Enum.Parse()方法,这个方法带有3个参数。第一个参数是要使用的枚举类型,其语法是关键字typeof后面跟放在括号中的枚举类名。第二个参数是要转换的字符串,第三个参数是一个bool,指定在进行转换时是否忽略大小写。最后,还要注意Enum.Parse()方法实际上返回一个对象引用,也就是说需要把这个字符串显式转换为需要的枚举类型(这是一个拆箱操作的例子)。

    Main()方法:

    C#程序是从方法Main()开始执行的,这个方法必须是类或结构的静态方法,并且其返回类型必须是int或void。

    虽然显示指定pubilc修饰符是很常见的,因为按照定义,必须在程序外部调用该方法,但我们给该入口点方法指定什么访问级别并不重要,即使把该方法标记为private,它也可以运行。

    在编译C#控制台或Windows应用程序时,默认的情况下,编译器会在类中查找与上述标签名匹配的Main()方法,并使这个类方法成为程序的入口点。如果出现多个Main()方法时,编译器会返回一个错误消息。例如下面的例子:

    namespace ConsoleApp2

    {

        class Program

        {

            static int Main()

            {

                MathExample.Main();

                return 0;

            }

        }

        class MathExample

        {

            static int Add(int x, int y)

            {

                return x + y;

            }

            public static int Main()

            {

                int i = Add(5, 10);

                Console.WriteLine(i);

                return 0;

            }

        }

    }

    上述代码包含两个类,它们都有一个Main()方法。如果按照通常的方式编译这段代码,就会报出一下错误:

    CS0017     程序定义了多个入口点。使用 /main (指定包含入口点的类型)进行编译。

    展开全文
  • c#枚举类型的初始值

    2018-08-21 08:57:00
    C#枚举类型的默认值为0,如果在使用过程中没有给枚举类型的变量赋值,则系统会自动默认赋值为0,而不是null,非常需要注意。最好在定义枚举类型变量的时候赋初值,否则不小心就容易出错。 本来还以为是定义的枚举...
  • ////////////////////////////////////// // // C#中整型到枚举类型的转换// mailtogst@163.com 郭胜涛 // ////////////////////////////////////// C#语言中提供了枚举和整型之间的强制转换功能,但这仅限于...
  • ​ 本片文章详细讲解c#枚举(enum)中的基础知识,主要深入讲解什么是枚举枚举有什么作用,枚举在什么情况下使用、枚举的规则,枚举的定义以及使用,枚举类型的转换等知识。 1、什么是枚举? ​ 枚举是一种值...
  • c# 枚举和位标志

    2018-07-13 23:11:59
    今天我们来讲一讲 枚举类型和 位标志一、Enum(枚举) 值类型,继承于system.Enum通过几种语言的对比,我们可以知道,如果不给枚举类型赋值,默认会从第一个赋0值,依次递增, 在编译枚举类型时,会把每个符号转换...
  • 我有一个枚举类型: #region -酒的种类- public enum WineType { 白酒 = 3, 葡萄酒 = 4, 洋酒 = 5, 老年陈酒 = 16, 啤酒 = 17 } #endregion 这是一个从数据库
  • 类、枚举的定义与使用 类 类的访问权限修饰符: public:公共,同C++。 protected:受保护的,只能从所在类和所在类的派生子类进行访问。 private:私有,访问仅限于本类。 类成员的默认级别为private。 不同于C++的...
  • 1.枚举(Enum) 确定数量,确定取值。方向(东南西北),性别(男女) 语法:[public] enum 枚举名 {  值1,  值2,  值3,  ........ } public:访问修饰符。公开的公共的,哪都可以访问。 enum:关键字,声明枚举...
  • 枚举的定义根据MSDN上给出的定义,枚举是一个指定的常数集,其基础类型可以是除Char外的任何整型。 如果没有显式声明基础类型,则使用 Int32。 Enum 是 .NET Framework 中所有枚举的基类。其基础类型可以是byte...
  • C#的显式枚举转换

    2012-08-11 19:54:14
    显式枚举转换包括以下内容:   ●从sbye,byte,short,ushort,int,uint,long,ulong,char,float,double,或decimal到任何枚举类型。   ●从任何枚举类型到sbyte,byte,short,ushort,int,uint,long,ulong,char,float...
  • C# 枚举(Enum)精讲

    2020-06-07 18:27:17
    C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 二、使用枚举的示例 1、首先我们声明一个枚举 //声明一个枚举,表示性别 enum Sex { male, // 男 Female // 女 } 2、进行调用 Sex sex = ...
  • c#:枚举与位枚举

    2020-04-06 16:54:55
    c#中的枚举本质上说是一个整数,但它同时和字符串又具有对应关系,可以从vs的提示中看出: 下面代码演示枚举数字和字符串的相互转换: public static void Main(string[] args) { EnumDegree degree = ...
  • C#枚举数组

    2008-04-13 16:54:00
    来源: http://hi.baidu.com/love_hh/blog/item/d680ab19bc330c4542a9adaa.html由于昨天停电,所以没有看书,今天补补昨天的东西吧,写个枚举的语法,然后写一些例子,其实...定义一个枚举方法:public enum Test{ Mo
  • C#学习——枚举

    2019-09-24 21:25:59
    using System; using System.Collections.Generic; using System.Linq; using System.Text;... //在此处声明枚举,它与结构的作用很类似,所以位置一样,但同时,枚举也可以在结构中被调用 public en...
  • 枚举  枚举类型声明为一组相关的符号常数定义了一个类型名称。枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。 枚举类型(也称为枚举)为定义一组可以赋给变量的...
  • C# 枚举(Enum) 枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 声明 enum 变量 声明枚举的一般语法: enum <enum_name>...
1 2 3 4 5 ... 20
收藏数 12,976
精华内容 5,190