C# EnumHelper Enum的值,Description,ToString()的相互转换

首先定义枚举类型,如下:

/// <summary>
/// 板块
/// </summary>
public enum Plate
{
        [Description("所有市场")]
        All = 0,
        [Description("沪深300")]
        HS300 = 1,
        [Description("创业板")]
        CYB = 2,
        [Description("上证50")]
        SZ50 = 3,
        [Description("中小板")]
        ZXB = 4,
        [Description("中证500")]
        ZZ500 = 5,
        [Description("包括指数")]
        BKZS = 6,
 }

接下来是Helper类

public static class EnumHelper
{
 
        /// <summary>
        /// 获取枚举值的Description
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string GetDescription<T>(this T value) where T : struct
        {
            string result = value.ToString();
            Type type = typeof(T);
            FieldInfo info = type.GetField(value.ToString());
            var attributes = info.GetCustomAttributes(typeof(DescriptionAttribute), true);
            if (attributes != null && attributes.FirstOrDefault() != null)
            {
                result = (attributes.First() as DescriptionAttribute).Description;
            }
 
            return result;
   }
 
        /// <summary>
        /// 根据Description获取枚举值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public static T GetValueByDescription<T>(this string description) where T : struct
        {
            Type type = typeof(T);
            foreach (var field in type.GetFields())
            {
                if (field.Name == description)
                {
                    return (T)field.GetValue(null);
                }
 
                var attributes = (DescriptionAttribute[])field.GetCustomAttributes(typeof(DescriptionAttribute), true);
                if (attributes != null && attributes.FirstOrDefault() != null)
                {
                    if (attributes.First().Description == description)
                    {
                        return (T)field.GetValue(null);
                    }
                }
            }
 
            throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", description), "Description");
        }
 
        /// <summary>
        /// 获取string获取枚举值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public static T GetValue<T>(this string value) where T : struct
        {
            T result;
            if (Enum.TryParse(value, true, out result))
            {
                return result;
            }
 
            throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", value), "Value");
        }
    }

再给个EnumHelper类吧:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.ComponentModel;
using System.Web;
 
namespace Vector.Framework.Tool
{
    /// <summary>
    /// 程序说明:枚举类型操作类
    /// 建立者  :spw
    /// 建立日期:2018-04-25
    /// </summary>
    public class EnumHelper
    {
        /// <summary>
        /// 通过枚举类型得到集合
        /// </summary>
        /// <param name="type">集合类型</param>
        /// <param name="hasAll">是否包含请选择</param>
        /// <returns></returns>
        public static List<ListItem> GetListItemByEnum(Type type, bool hasAll=true)
        {
            List<ListItem> list = new List<ListItem>();
            FieldInfo[] fields = type.GetFields();
            if (hasAll)
            {
                list.Add(new ListItem() { Value = "-1", Text = "请选择" });
            }
 
            for (int i = 1, count = fields.Length; i < count; i++)
            {
                list.Add(new ListItem() { Value = ((int)Enum.Parse(type, fields[i].Name)).ToString(), Text = fields[i].Name });
            }
            return list;
        }
 
        #region 枚举,值,串的相互转化
        /// <summary>
        /// 枚举转字符串
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="t">枚举对象</param>
        /// <returns></returns>
        private static string Enum2Text<T>(T t)
        {
            //string enumStringOne = color.ToString(); //效率低,不推荐  
            //string enumStringTwo = Enum.GetName(typeof(Color), color);//推荐  
            return Enum.GetName(typeof(T), t);
        }
 
        /// <summary>
        /// 枚举转值
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="t">枚举对象</param>
        /// <returns></returns>
        private static int Enum2Value<T>(T t)
        {
            //int enumValueOne = t.GetHashCode();
            //int enumValueTwo = (int)color;
            //int enumValueThree = Convert.ToInt32(color);
            return t.GetHashCode();
        }
 
        /// <summary>
        /// 字符串转枚举
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="text">字符串</param>
        /// <returns></returns>
        private static T String2Enum<T>(string text)
        {
            //Color enumOne = (Color)Enum.Parse(typeof(Color), colorString);
            return (T)Enum.Parse(typeof(T), text);
        }
 
        /// <summary>
        /// 字符串转值
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="text">字符串</param>
        /// <returns></returns>
        public static int String2Value<T>(string text)
        {
            //int enumValueFour = (int)Enum.Parse(typeof(Color), colorString);
            return (int)Enum.Parse(typeof(T), text);
        }
 
        /// <summary>
        /// 值转枚举
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        private static T Value2Enum<T>(int value)
        {
            //Color enumTwo = (Color)colorValue;
            //Color enumThree = (Color)Enum.ToObject(typeof(Color), colorValue);
            return (T)Enum.ToObject(typeof(T), value);
        }
 
        /// <summary>
        /// 值转字符串
        /// </summary>
        /// <typeparam name="T">枚举类型</typeparam>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string Value2Text<T>(int value)
        {
            //string enumStringThree = Enum.GetName(typeof(Color), colorValue);
            return Enum.GetName(typeof(T), value);
        }
        #endregion
    }
 
    public class ListItem
    {
        /// <summary>
        /// 显示值
        /// </summary>
        public string Text { get; set; }
        /// <summary>
        /// 实际值
        /// </summary>
        public string Value { get; set; }
        /// <summary>
        /// 是否选中
        /// </summary>
        public bool Selected { get; set; }
    }
}

出处:https://blog.csdn.net/u011400752/article/details/83818832

https://blog.csdn.net/spw55381155/article/details/80074326

猜你喜欢

转载自www.cnblogs.com/mq0036/p/10585174.html