C# 枚举

目录

一、枚举

二、声明枚举

三、枚举的简单使用

四、扩展方法

一、枚举

        1、枚举是将变量的值罗列出来,变量的值只限于列举出来的值的范围。

        2、枚举使用enum关键字来声明,与类同级。枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符。枚举本身的修饰符仅能使用public和internal。

        3、枚举是值类型。

        4、枚举是隐式密封的,不允许作为基类派生子类。

        5、枚举类型的枚举成员均为静态,默认为Int32类型。

        6、枚举成员不能相同,但枚举的值可以相同。

        7、枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。

二、声明枚举

        1、不给成员赋值,成员的常数值默认从0开始。

public enum Week
{
  Sunday,
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday
}

        2、给成员赋值,下一个成员的值为上一个成员值+1

public enum Number
{
  One = 1,
  Two,
  Three,
  Seven = 7,
  Eight,
  Nine
}

        3、枚举可以继承byte、sbyte、short、ushort、 int、 uint、long 或 ulong

public enum Month : byte
{
  January,
  February,
  March,
  April,
  May,
  June,
  July,
  August,
  September,
  October,
  November,
  December
}

        4、枚举成员的值可以等于某个成员加上一个值

public enum MachineState
{
  PowerOff = 0,
  Running = 1,
  Sleeping = 2,
  Hibernating = Sleeping + 3
}

         5、自定义属性

[AttributeUsage(AttributeTargets.Field)]
public class EnumNote : Attribute
{
    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="_note"></param>
    public EnumNote(string _note)
    {
        Note = _note;
    }
    public string Note { get; set; }
}


public enum Week
{
    [EnumNote("周日")]
    Sunday
}

        6、 DescriptionAttribute

public enum Week
{
    [Description("周日")]
    Sunday = 7
}

三、枚举的简单使用

        1、转成整数

// 1
int i = (int)Week.Sunday;
// 2
int j = Week.Sunday.GetHashCode();

//输出 7

        2、转成字符串

string s = Week.Sunday.ToString();

//输出 Sunday

        3、GetName方法:在指定枚举中检索具有指定值的常数的名称。

string strToday = Enum.GetName(typeof(Week), 3);

//输出 Wednesday

        4、GetNames方法: 检索指定枚举中常数名称的数组。

string[] array1= Enum.GetNames(typeof(Week));
Array array2 = Enum.GetNames(typeof(Week));

//new [] {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

        5、GetUnderlyingType方法:返回指定枚举的基础类型。

Type type = Enum.GetUnderlyingType(typeof(Week));

        6、GetValues方法:检索指定枚举中常数值的数组。

Array array3 = Enum.GetValues(typeof(Week));

        7、Parse方法:将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。

string s1 = Enum.Parse(typeof(Week), "3").ToString();
//输出 Wednesday

int j = Convert.ToInt32(Enum.Parse(typeof(Week), "Wednesday"));
//输出 3

//默认第三个参数为false,当传true时忽略大小写
int k = Convert.ToInt32(Enum.Parse(typeof(Week), "wednesday", true));
//输出 3

        8、Format方法:根据指定格式将指定枚举类型的指定值转换为其等效的字符串表示形式。

string s2 = Enum.Format(typeof(Week), 3, "G");
//输出 Wednesday

        9、IsDefined方法:返回指定枚举中是否存在具有指定值的常数的指示。

bool b = Enum.IsDefined(typeof(Week), 3);

        10、ToObject方法: 将具有整数值的指定对象转换为枚举成员。

string s3 = Enum.ToObject(typeof(Week),3).ToString();

        11、TryParse方法:将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。

Week w;
bool b1 = Enum.TryParse<Week>("Wednesday", out w);

四、扩展方法

        1、根据常数名称获取对应的常数值

public static Enum StrConvertEnum(this string str, Type type)
{
    string[] enumNames = type.GetEnumNames();

    Enum e = null;
    foreach (var item in enumNames)
    {
        if (item == str)
        {
            e = (Enum)Enum.Parse(type, item);
            break;
        }
    }
    return e;
}


int i = "Wednesday".StrConvertEnum(typeof(Week)).GetHashCode();
//输出 3

        2、获取属性 

public static string GetNote(this Enum value)
{
    Type type = value.GetType();
    string name = Enum.GetName(type, value);
    if (string.IsNullOrEmpty(name))
    {
        return null;
    }
    FieldInfo field = type.GetField(name);

    EnumNote attribute = Attribute.GetCustomAttribute(field, typeof(EnumNote)) as EnumNote;

    return attribute?.Note;
}

string note = "Wednesday".StrConvertEnum(typeof(Week)).GetNote();

//输出 周三

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中的枚举(enum)是一种特殊的数据类型,它用于定义一组相关的常量值。枚举定义了一组取值范围,并且这些取值范围都有一个名称,便于程序中的使用。 枚举的定义格式如下: ``` enum 枚举名称 { 枚举项1, 枚举项2, 枚举项3, …… } ``` 其中,枚举名称是枚举类型的名称,枚举项是枚举类型的取值范围。例如: ``` enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } ``` 上面的代码定义了一个WeekDays枚举类型,取值范围为星期一到星期日。 枚举类型的值可以直接使用枚举项来表示,例如: ``` WeekDays day = WeekDays.Monday; ``` 枚举类型的值也可以转换为整型,例如: ``` int dayValue = (int)WeekDays.Monday; ``` 在枚举中,每个枚举项都有一个默认的整型值,从0开始递增。如果需要给枚举项指定一个特定的值,可以使用赋值语句,例如: ``` enum WeekDays { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday } ``` 上面的代码中,Monday的值为1,后面的枚举项的值依次递增,依次为2、3、4、5、6、7。 枚举类型还可以使用位标志,允许同时包含多个枚举项的值。例如: ``` [Flags] enum FileAccess { None = 0, Read = 1, Write = 2, ReadWrite = Read | Write } ``` 上面的代码中,FileAccess枚举类型使用了Flags属性,表示允许以位标志的方式组合多个枚举项的值。其中,None的值为0,Read的值为1,Write的值为2,ReadWrite的值为3(即1和2的按位或)。 以上就是C#枚举的基本讲解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值