C# 枚举的一些使用

4 篇文章 0 订阅

转自其他大佬文章,具体忘了,做下笔记

枚举代码:

    public enum ApiConfig
    {
        /// <summary>
        /// 用户信息
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        Users,
        /// <summary>
        /// 部门
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        Dept,
        /// <summary>
        /// 人员信息
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        Person,
        /// <summary>
        /// 卡片
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        Card,
        /// <summary>
        /// 门属性
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        Doors,
        /// <summary>
        /// 时段
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        Plans,
        /// <summary>
        /// 权限
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        DoorRight,
        /// <summary>
        /// 刷卡记录
        /// </summary>
        //[EnumDescription("换成接口地址后可反射获取此字符串")]
        DoorEvents,
    }

1,直接把枚举转成字符串

ApiConfig api;
string enumstr = api.Users.ToString();

string enumstr = api.GetName(typeof(ApiConfig), api);

2,枚举+switch返回字符串

        public string ApiPreparation(ApiConfig api)
        {
            switch (api)
            {
                case ApiConfig.Users: 
                    return "字符串";
                case ApiConfig.Dept: 
                    return "字符串";
                case ApiConfig.Person: 
                    return "字符串";
                case ApiConfig.Card: 
                    return "字符串";
                case ApiConfig.Doors: 
                    return "字符串";
                case ApiConfig.Plans: 
                    return "字符串";
                case ApiConfig.DoorRight: 
                    return "字符串";
                case ApiConfig.DoorEvents: 
                    return "字符串";
                default: //...
                    throw new Exception("接口未开发");
            }
        }

3,用反射获取枚举的属性,大的话性能会有点损耗,但是代码简洁,看着更舒服

把上面的枚举属性的注释解开

//[EnumDescription("换成接口地址后可反射获取此字符串")]

再添加反射获取枚举的属性的代码

    /// <summary>
    /// 自定义属性,用于设置定义的属性
    /// </summary>
    //public sealed class EnumDescriptionAttribute : Attribute
    //{
    //    private string description;//属性
    //    /// <summary>
    //    /// 获取枚举属性
    //    /// </summary>
    //    public string Description { get { return description; } }

    //    public EnumDescriptionAttribute(string description) : base()
    //    {
    //        this.description = description;
    //    }
    //}

    /// <summary>
    /// 获取枚举属性字符串
    /// </summary>
    //public static class EnumHelper
    //{
    //    public static string GetDescription(Enum value)
    //    {
    //        if (value == null)
    //        {
    //            throw new ArgumentException("value");
    //        }
    //        string description = value.ToString();//将枚举名称转成字符串用来反射
    //        //反射中 FiedInfo 了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值
    //        //获取value的Type对象,再调用 GetFields 返回 FieldInfo 类型,用于取得该类的字段(成员变量)的信息
    //        var fieldInfo = value.GetType().GetField(description);//搜索
    //        var attributes = (EnumDescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(EnumDescriptionAttribute), false);//返回所有属性
    //        if (attributes != null && attributes.Length > 0)
    //        {
    //            description = attributes[0].Description;//获取第一个属性信息
    //        }
    //        return description;
    //    }
    //}

反射就是可以动态的查询对象的属性,方法等,只要知道名称就能动态的调用和处理,但是资源会花的比明确调用的多,但是扩展和维护相当方便.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值