首页后端开发ASP.NETEnum扩展特性实例代码

Enum扩展特性实例代码

时间2024-01-30 06:11:03发布访客分类ASP.NET浏览814
导读:收集整理的这篇文章主要介绍了Enum扩展特性实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。由于对英语的天生缺陷,在枚举时一直使用中文,这样就不用看注释就知道枚举意思,今天看到博文使用特性代替了直接使用中文作为属性。特意摘抄部分为...
收集整理的这篇文章主要介绍了Enum扩展特性实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。由于对英语的天生缺陷,在枚举时一直使用中文,这样就不用看注释就知道枚举意思,今天看到博文

使用特性代替了直接使用中文作为属性。特意摘抄部分为以后使用方便

    /// summary>
    /// 枚举帮助类/// /summary>
public static class EnumTools    {
    /// summary>
    ///  获取当前枚举值的描述和排序/// /summary>
    /// param name="value">
    /param>
    /// returns>
    返回元组Tuple(string,int)/returns>
    public static Tuplestring,int>
 GetDescription(this Enum value)        {
    int order = 0;
    string description = string.Empty;
                TyPE type = value.GetType();
    // 获取枚举FieldInfo fieldInfo = type.GetField(value.ToString());
    // 获取枚举自定义的特性DescriptionAttributeobject[] attrs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
                DescriptionAttribute attr = (DescriptionAttribute)attrs.FirstOrDefault(a =>
     a is DescriptionAttribute);
                description = fieldInfo.Name;
if (attr != null)            {
                    order = attr.Order;
                    description = attr.Name;
            }
    return new Tuplestring,int>
    (description,order);
        }
    /// summary>
    /// 获取当前枚举的所有描述/// /summary>
    /// returns>
    /returns>
    public static ListKeyValuePairint, string>
    >
     GetAllT>
()        {
    return GetAll(typeof(T));
        }
    /// summary>
    /// 获取所有的枚举描述和值/// /summary>
    /// param name="type">
    /param>
    /// returns>
    /returns>
    public static ListKeyValuePairint, string>
    >
 GetAll(Type type)        {
                ListEnumToolsModel>
     list = new ListEnumToolsModel>
    ();
// 循环枚举获取所有的Fieldsforeach (VAR field in type.GetFields())            {
// 如果是枚举类型if (field.FieldType.IsEnum)                {
    object tmp = field.GetValue(null);
                        Enum enumValue = (Enum)tmp;
    int intValue = Convert.ToInt32(enumValue);
    var dec = enumValue.GetDescription();
    int order= dec.ITem2;
    string showName = dec.Item1;
 // 获取描述和排序list.Add(new EnumToolsModel {
 Key = intValue, Name = showName, Order = order }
    );
                }
            }
    // 排序并转成KeyValue返回return list.OrderBy(i =>
     i.Order).Select(i =>
     new KeyValuePairint, string>
    (i.Key, i.Name)).ToList();
        }
    /// summary>
    /// 枚举Model/// /summary>
 partial class EnumToolsModel        {
public int Order {
     get;
     set;
 }
public string Name {
     get;
     set;
 }
public int Key {
     get;
     set;
 }
        }
    }
    /// summary>
    /// 枚举特性/// /summary>
[Attributeusage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]public class DescriptionAttribute : Attribute    {
    /// summary>
    /// 排序/// /summary>
public int Order {
     get;
     set;
 }
    /// summary>
    /// 名称/// /summary>
public string Name {
     get;
     set;
 }
    /// summary>
    /// 定义描述名称/// /summary>
    /// param name="name">
    名称/param>
public DescriptionAttribute(string name)        {
                Name = name;
        }
    /// summary>
    /// 定义描述名称和排序/// /summary>
    /// param name="name">
    名称/param>
    /// param name="order">
    排序/param>
public DescriptionAttribute(string name, int order)        {
                Name = name;
                Order = order;
        }
    }
    
View Code

把原文中的out参数替换成返回元组,由于项目是vs2015开发,不能用c#7.0特性,否则用7.0中的值元组应该更好一点。性能和显示友好性都会有改进。

以上就是Enum扩展特性实例代码的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

Enum中文代替特性

若转载请注明出处: Enum扩展特性实例代码
本文地址: https://pptw.com/jishu/592143.html
树莓派(Raspberry Pi,RPi)的详细介绍 C#怎么将 HTML转换为图片或 PDF?

游客 回复需填写必要信息