C# EnumHelper Enum的值,Description,ToString()的相互转换
首先定义枚举类型,如下:
/// <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()的相互转换的更多相关文章
- C# Enum Name String Description之间的相互转换
最近工作中经常用到Enum中Value.String.Description之间的相互转换,特此总结一下. 1.首先定义Enum对象 public enum Weekday { [Descriptio ...
- 获取Enum枚举值描述的几法方法
原文:获取Enum枚举值描述的几法方法 1.定义枚举时直接用中文 由于VS对中文支持的很不错,所以很多程序员都采用了此方案. 缺点:1.不适合多语言 2.感觉不太完美,毕竟大部分程序员大部分代码都使用 ...
- Enum 枚举值 (一) 获取描述信息
封装了方法: public static class EnumOperate { public class BaseDescriptionAttribute : DescriptionAttribut ...
- MVC3不能正确识别JSON中的Enum枚举值
一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使 ...
- C#遍历枚举(Enum)值
foreach (object o in Enum.GetValues(typeof(EmpType))) { Console.WriteLine("{0}:{1}", o, En ...
- java enum 枚举值
public enum PieChartEnum { PIE00("pie00"), PIE10("pie10"), PIE11("pie11&quo ...
- 从一个int值显示相应枚举类型的名称或者描述
我正在做一个出入库管理的简单项目,在Models里定义了这样的枚举类型 public enum InOrOut { [Description("出库")] Out = , [Des ...
- Enum扩展及MVC中DropDownListFor扩展方法的使用
public enum SearchState { /// <summary> /// 全部 /// </summary> [Description("全部" ...
- C# 枚举类型 enum
我个人感觉平日用到的enum应该是非常简单的,无非就是枚举和整数.字符串之间的转换.最近工作发现一些同事居然不太会用这个东东,于是就整理一下. 枚举类型是定义了一组“符号名称/值”配对.枚举类型是强类 ...
随机推荐
- centos7 下安装mysql教程
最近要在centos服务器上配置环境,在部署mysql的时候,碰到各种各样的问题,网上博客文章也是有各种坑,目前发现一个比较好的博客: https://blog.csdn.net/xiaomojun/ ...
- [Deep Learning] mini-batch
转自 http://hp.stuhome.net/index.php/2016/09/20/tensorflow_batch_minibatch/ 深度学习的优化算法,说白了就是梯度下降.每次的参数更 ...
- 数据库between and
在此记录一下,between相当于大于等于,and相当于小于,举个例子:select * from A where modefytime between '31-3月 -16' and '1-4月 - ...
- Verilog中的reg一定会被综合成寄存器么
对应于实际的数字电路中,如果该程序块描述的是时序逻辑,则该寄存器变量对应为寄存器:如果该程序块描述的是组合逻辑,该寄存器变量对应为硬件逻辑:如果该程序块描述的是不完全组合逻辑,那么该寄存器变量也可以对 ...
- 面试知识点准备-C++常见问题
博客园写写格式简单的文章还行,格式一复杂就不行了,可能是我不会用吧,我有强迫症,有道云格式很好用,以后去有道写这种东西了 有道云笔记链接:http://note.youdao.com/noteshar ...
- vue--http请求的封装--token
export const FetchHandler = function (url,opt) { let paramStr = ''; let token = ''; for(key in opt){ ...
- Python中常见的序列及其函数
分片:分片操作的实现需要提供两个索引作为边界,第一个包含在分片内,第二个不包含 number =[1,2,3,4,5,6,7,8,9,10] number [3:6] -->[4,5,6] n ...
- String与StringBuilder 区别
string 是不可变字符串.一旦创建不可修改,使用Insert.Remove.PadLeft.Replace.Splict等,返回都是新的字符串对象. StringBuilder 是可变字符串,大多 ...
- 一些面试题(关于string的)
一些常见的面试题: String a = "hello2"; String b = "hello" + 2; System.out.println(a == b ...
- python学习笔记——(一)基础设置
python的学习,今天就开始上开发环境Pycharm,这样以后在调试,使用和学习起来就方便很多. 我用的是JetBrains PyCharm Community Edition 2018.1.1 x ...