枚举帮助类

    /// <summary>
    /// 枚举帮助类
    /// </summary>
    public static class EnumHelper
    {
        /// <summary>
        /// 获取枚举注释
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="e">枚举值</param>
        /// <returns></returns>
        public static string ToComment<T>(this T e) where T : System.Enum
        {
            var t = typeof(T);
            //if (!t.IsEnum) return null;
            var name = t.GetEnumName(e);
            var fieldInfos = t.GetFields();
            foreach (var fieldInfo in fieldInfos)
            {
                if (fieldInfo.Name == name)
                {
                    var attr = fieldInfo.GetCustomAttributes(typeof(EnumNameAttribute), false).FirstOrDefault();
                    if (attr != null)
                    {
                        return ((EnumNameAttribute)attr).Comment;
                    }
                }
            }
            return null;
        }

        /// <summary>
        /// 尝试通过注释获取枚举值
        /// </summary>
        /// <typeparam name="T">转换枚举类型</typeparam>
        /// <param name="comment">注释</param>
        /// <param name="value">枚举值</param>
        /// <returns></returns>
        public static bool TryCommentToEnum<T>(string comment, out T value) where T : System.Enum
        {
            var t = typeof(T);
            //if (!t.IsEnum)
            //{
            //    value = default(T);
            //    return false;
            //};
            var fiList = t.GetFields();
            foreach (var item in fiList)
            {
                var attr = item.GetCustomAttributes(typeof(EnumNameAttribute), false).FirstOrDefault();
                if (attr != null)
                {
                    if (((EnumNameAttribute)attr).Comment == comment)
                    {
                        value = (T)t.GetField(item.Name).GetValue(t);
                        return true;
                    }
                }
            }

            value = default(T);
            return false;
        }
    }
    [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
    public class EnumNameAttribute : Attribute
    {
        /// <summary>
        /// 说明
        /// </summary>
        public string Comment { get; }

        public EnumNameAttribute(string comment)
        {
            Comment = comment;
        }
    }

    /// <summary>
    /// 枚举项数据
    /// </summary>
    public class EnumItem<T>
    {
        /// <summary>
        /// 枚举名称
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 枚举值
        /// </summary>
        public T Value { get; set; }

        /// <summary>
        /// 枚举注释
        /// </summary>
        public string Comment { get; set; }

        public EnumItem()
        {
            Name = "";
            Comment = "";
            Value = default(T);
        }
    }

 


 

posted @ 2020-12-07 17:22  春夏秋冬的千山万水  阅读(119)  评论(1)    收藏  举报