c#中的枚举

枚举是用户定义的整数类型,它是强类型的,与类同级,通常用来表示一组常量。(成员可以使用汉字)

public enum Sex:int  //可指定类型有:byte、sbyte、short、ushort、int、uint、long、ulong
        {
            男 = 0,   //可指定允许范围的整数,默认为0,以1为增量增加
            女 = 1
        }

枚举的优点:

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

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

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

1、简单枚举

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

2、标志枚举

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

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

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace enumApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var man = People.高 | People.帅;  //赋值为101    计算方法001或上100,结果是101
            Console.WriteLine("高和帅的枚举值和为:"+(int)man);
            if ((man & People.高) == People.高)       //101 man 
            {                                    //001 高 逐位相与,
                Console.WriteLine("此人:高");      //001 如果结果是高,就可以反推出man包含 高
            }
            else
            {
                Console.WriteLine("此人:矮");
            }
            Console.ReadKey();
        }

       [System.Flags]
       public enum People:int 
        {
            高 = 1,  //001
            富 = 2,  //010
            帅 = 4,  //100
        }
    }
}

枚举。整数。字符串之间的转换

public enum Sex
{
男,

}

static void Main(string[] args)
{
Console.WriteLine((int)Sex.女);//将枚举转换为int
Console.WriteLine(Sex.女.ToString());//将枚举转换为string
Sex sex1 = (Sex)1;//将int转换为枚举
Console.WriteLine(sex1.ToString());
Sex sex2 = (Sex)Enum.Parse(typeof(Sex), "女");//将string转换为枚举
Console.WriteLine(sex2.ToString());
Console.WriteLine(Enum.GetName(typeof(Sex),1));//将数字转换为枚举中对应的字符串
}

posted @ 2019-08-14 17:56  盗哥泡茶去了  阅读(450)  评论(0编辑  收藏  举报