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

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

接下来是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 = , 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

C# EnumHelper Enum的值,Description,ToString()的相互转换的更多相关文章

  1. C# Enum Name String Description之间的相互转换

    最近工作中经常用到Enum中Value.String.Description之间的相互转换,特此总结一下. 1.首先定义Enum对象 public enum Weekday { [Descriptio ...

  2. 获取Enum枚举值描述的几法方法

    原文:获取Enum枚举值描述的几法方法 1.定义枚举时直接用中文 由于VS对中文支持的很不错,所以很多程序员都采用了此方案. 缺点:1.不适合多语言 2.感觉不太完美,毕竟大部分程序员大部分代码都使用 ...

  3. Enum 枚举值 (一) 获取描述信息

    封装了方法: public static class EnumOperate { public class BaseDescriptionAttribute : DescriptionAttribut ...

  4. MVC3不能正确识别JSON中的Enum枚举值

    一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...

  5. C#遍历枚举(Enum)值

    foreach (object o in Enum.GetValues(typeof(EmpType))) { Console.WriteLine("{0}:{1}", o, En ...

  6. java enum 枚举值

    public enum PieChartEnum { PIE00("pie00"), PIE10("pie10"), PIE11("pie11&quo ...

  7. 从一个int值显示相应枚举类型的名称或者描述

    我正在做一个出入库管理的简单项目,在Models里定义了这样的枚举类型 public enum InOrOut { [Description("出库")] Out = , [Des ...

  8. Enum扩展及MVC中DropDownListFor扩展方法的使用

    public enum SearchState { /// <summary> /// 全部 /// </summary> [Description("全部" ...

  9. C# 枚举类型 enum

    我个人感觉平日用到的enum应该是非常简单的,无非就是枚举和整数.字符串之间的转换.最近工作发现一些同事居然不太会用这个东东,于是就整理一下. 枚举类型是定义了一组“符号名称/值”配对.枚举类型是强类 ...

随机推荐

  1. 18.Canny边缘检测

    Canny边缘检测算法以Canny的名字命名,其中Canny的目标是找到一个最优的边缘检测算法,其有三种衡量标准: 低错误率:标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报 高定位性:标识出 ...

  2. 【C#】await & Result DeadLock

    随意使用异步的await和Result,被弄得欲仙欲死,然后看了 Don't Block on Async Code,稍许明白,翻译然后加上自己的理解以加深印象. 会死锁的两个例子 UI例子 publ ...

  3. gprinter佳博打印机androidSDK

    最近在用佳博的SDK做打印的功能,由于一直做的是.net,没有android的基础,这个功能我做了一个多月,包括前期调研佳博打印机的打印方式.佳博打印机有两种打印方式,一种是标签打印,要用到TscCo ...

  4. unity UI如何开启(显示)或者关闭(隐藏)Panel界面最好?

    https://segmentfault.com/a/1190000012357091 unity UI如何开启(显示)或者关闭(隐藏)Panel界面,相信大家都是知道的,但是如何做最好呢? 可能大家 ...

  5. C#设计模式——单例模式的实现

    1. 什么是单例 保证一个类只有一个实例的实现方法. 2. 使用场景 页面访问计数器 需要保持状态的工具类 需求很多,不能一一列举了 3. 实现方 非线程安全 /// <summary> ...

  6. php中生成透明背景png缩略图程序

    /** *$sourePic:原图路径 * $smallFileName:小图名称 * $width:小图宽 * $heigh:小图高 */function pngthumb($sourePic,$s ...

  7. django 模型操作

    # 添加 Fruit.objects.create(name='Apple') # 更新 UserProfile.objects.filter(user=admin).update(**{'onlin ...

  8. H5介绍与测试设计

    近期的项目中接触的基本都为H5的测试工作,从项目初期评审到测试工作的完成过程中,遇到了很多问题是与APP测试方法不太相同的地方,在此希望总结测试过程遇到的问题及新思路给之后会接触到H5测试的同学. 这 ...

  9. mysql navcate longblob 查询结果导出倒入

    由于之前项目为了查询方便,且不受权限控制.所以把image储存在了数据库.但是也遇到了很多瓶颈问题. 1,丢图从日志上查询获知,丢图95%以上是由于mysql的timeout时间失效引起的.(由于另一 ...

  10. Java中PO、DO、TO、DTO、 VO、 BO、POJO 、DAO的概念

    本文系转载-原创@HollisChuang :http://www.hollischuang.com/archives/553 1.PO(persistant object) 持久对象   在 o/r ...