文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#中的枚举类型(Enum)介绍

2024-04-02 19:55

关注

枚举(Enum)定义

enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它。但是,还可以将枚举嵌套在类或结构中。现在的有些电商网站根据购物的积分用到的,金牌会员,银牌会员,铜牌会员.

enum MemberLevel
{
    gold,
    silver,
    copper
}

枚举值获取

一般获取的时候包括获取变量和变量值,默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。直接使用Enum中的静态方法即可操作.GetValues中获取的是枚举变量的值,类型是枚举名,之后自动输出的是枚举名.

string s = Enum.GetName(typeof(MemberLevel), 3);
 Console.WriteLine(s);
 
 Console.WriteLine("MemberLevel中的值:");
 foreach (int i in Enum.GetValues(typeof(MemberLevel)))
     Console.WriteLine(i);
 Console.WriteLine("MemberLevel中的值(注意类型):");
 foreach (MemberLevel i in Enum.GetValues(typeof(MemberLevel)))
     Console.WriteLine(i);
 
 Console.WriteLine("MemberLevel中的变量:");
 foreach (string str in Enum.GetNames(typeof(MemberLevel)))
     Console.WriteLine(str);
 System.Console.Read();

枚举类型

曾经很长的一段时间自己一度以为枚举的值只能是int类型,其实每种枚举类型都有基础类型,该类型可以是除 char以外的任何整型(重点)。枚举元素的默认基础类型为 int.准许使用的枚举类型有byte、sbyte、short、ushort、int、uint、long 或 ulong。如果枚举值为long,如下所示:

enum MemberLevel:long
{
    gold = 2147483648L,
    silver=232L,
    copper=10L
}

枚举Flags和Description特性值

可以使用枚举类型定义位标志,从而使该枚举类型的实例可以存储枚举数列表中定义的值的任意组合。创建位标志枚举的方法是应用System.FlagsAttribute特性并适当定义一些值,以便可以对这些值执行AND、OR、NOT和XOR按位运算。一般情况下如果零值不表示“未设置任何标志”,则请不要为标志指定零值.

[Flags]
enum MemberLevel
{
    [Description("二进制表示为1----0001")]
    gold = 0x1,
    [Description("二进制表示为4----0010")]
    silver = 0x04,
    [Description("二进制表示为16----0100")]
    copper = 0x10
}

程序运行如下所示:

// 0001(Gold) and 0100(silver) => 0101(5).
MemberLevel options = MemberLevel.gold | MemberLevel.silver;
Console.WriteLine(options);
Console.WriteLine((int)options);
System.Console.Read();

上面的基本上属于入门的知识,在项目中通常用到的是在枚举变量上面加上Description,需要显示的枚举的特性值,枚举的值一般为int在数据库中占用空间比较小,枚举的变量用于给数据库中的字段赋值,那么如果要显示字段就需要考虑到Descripttion特性,显示中文名称,例如一个用户的的等级在数据中存储的是1,显示的时候显示为金牌用户,当然也可以使用switch,if..else..去判断,如果枚举比较多,自己写的也很不爽.特性这个时候刚发挥作用了,如下所示:

[Description("会员等级")]
enum MemberLevel
{
    [Description("金牌会员")]
    gold =1,
    [Description("银牌会员")]
    silver = 2,
    [Description("铜牌会员")]
    copper =3
}

首先来写一个扩展,静态类,静态方法,this关键字,istop主要是用来获取枚举上面的描述.

public static class EnumHelper
{
    /// <summary>
    /// 返回枚举项的描述信息。
    /// </summary>
    /// <param name="value">要获取描述信息的枚举项。</param>
    /// <returns>枚举想的描述信息。</returns>
    public static string GetDescription(this Enum value, bool isTop = false)
    {
        Type enumType = value.GetType();
        DescriptionAttribute attr = null;
        if (isTop)
        {
            attr = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
        }
        else
        {
            // 获取枚举常数名称。
            string name = Enum.GetName(enumType, value);
            if (name != null)
            {
                // 获取枚举字段。
                FieldInfo fieldInfo = enumType.GetField(name);
                if (fieldInfo != null)
                {
                    // 获取描述的属性。
                    attr = Attribute.GetCustomAttribute(fieldInfo,typeof(DescriptionAttribute), false) as DescriptionAttribute;
                }
            }
        }
 
        if (attr != null && !string.IsNullOrEmpty(attr.Description))
            return attr.Description;
        else
            return string.Empty;
 
    }
}

主程序调用如下所示:

MemberLevel gold = MemberLevel.gold;
Console.WriteLine(gold.GetDescription());
System.Console.Read();

到此这篇关于C#枚举类型(Enum)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯