You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.4 KiB
132 lines
4.4 KiB
3 years ago
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.ComponentModel;
|
||
|
using System.Linq;
|
||
|
using System.Reflection;
|
||
|
|
||
|
namespace Binance.TradeRobot.Common.Extensions
|
||
|
{
|
||
|
public static class EnumExtension
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 从枚举中获取Description
|
||
|
/// </summary>
|
||
|
/// <param name="enumName">需要获取枚举描述的枚举</param>
|
||
|
/// <returns>描述内容</returns>
|
||
|
public static string GetDescription(this System.Enum enumName)
|
||
|
{
|
||
|
var fieldInfo = enumName.GetType().GetField(enumName.ToString());
|
||
|
var attributes = GetDescriptAttr(fieldInfo);
|
||
|
string description;
|
||
|
if (attributes != null && attributes.Length > 0)
|
||
|
{
|
||
|
description = attributes[0].Description;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
description = enumName.ToString();
|
||
|
}
|
||
|
return description;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 根据 value 值获取Description
|
||
|
/// </summary>
|
||
|
/// <param name="enumType"></param>
|
||
|
/// <param name="value"></param>
|
||
|
/// <returns></returns>
|
||
|
public static string GetDescription(this Type enumType, int value)
|
||
|
{
|
||
|
var Key = GetNameAndValue(enumType).FirstOrDefault(p => p.Value.Equals(value)).Key;
|
||
|
if (Key == null)
|
||
|
return null;
|
||
|
|
||
|
return Key.ToString();
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取字段Description
|
||
|
/// </summary>
|
||
|
/// <param name="fieldInfo">FieldInfo</param>
|
||
|
/// <returns>DescriptionAttribute[] </returns>
|
||
|
private static DescriptionAttribute[] GetDescriptAttr(FieldInfo fieldInfo)
|
||
|
{
|
||
|
if (fieldInfo != null)
|
||
|
{
|
||
|
return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取枚举所有名称
|
||
|
/// </summary>
|
||
|
/// <param name="enumType">枚举类型typeof(T)</param>
|
||
|
/// <returns>枚举名称列表</returns>
|
||
|
public static List<string> GetEnumNamesList(this Type enumType)
|
||
|
{
|
||
|
return Enum.GetNames(enumType).ToList();
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取所有枚举对应的值
|
||
|
/// </summary>
|
||
|
/// <param name="enumType">枚举类型typeof(T)</param>
|
||
|
/// <returns>枚举值列表</returns>
|
||
|
public static List<int> GetEnumValuesList(this Type enumType)
|
||
|
{
|
||
|
var list = new List<int>();
|
||
|
foreach (var value in System.Enum.GetValues(enumType))
|
||
|
{
|
||
|
list.Add(Convert.ToInt32(value));
|
||
|
}
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取枚举名以及对应的Description
|
||
|
/// </summary>
|
||
|
/// <param name="type">枚举类型typeof(T)</param>
|
||
|
/// <returns>返回Dictionary ,Key为枚举名, Value为枚举对应的Description</returns>
|
||
|
public static Dictionary<object, object> GetNameAndDescriptions(this Type type)
|
||
|
{
|
||
|
if (type.IsEnum)
|
||
|
{
|
||
|
var dic = new Dictionary<object, object>();
|
||
|
var enumValues = System.Enum.GetValues(type);
|
||
|
foreach (System.Enum value in enumValues)
|
||
|
{
|
||
|
dic.Add(value, GetDescription(value));
|
||
|
}
|
||
|
return dic;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取枚举名以及对应的Value
|
||
|
/// </summary>
|
||
|
/// <param name="type">枚举类型typeof(T)</param>
|
||
|
/// <returns>返回Dictionary ,Key为描述名, Value为枚举对应的值</returns>
|
||
|
public static Dictionary<object, object> GetNameAndValue(this Type type)
|
||
|
{
|
||
|
if (type.IsEnum)
|
||
|
{
|
||
|
var dic = new Dictionary<object, object>();
|
||
|
var enumValues = System.Enum.GetValues(type);
|
||
|
foreach (System.Enum value in enumValues)
|
||
|
{
|
||
|
dic.Add(GetDescription(value), value.GetHashCode());
|
||
|
}
|
||
|
return dic;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public static int GetValue(this System.Enum enumName)
|
||
|
{
|
||
|
return Convert.ToInt32(enumName.GetType().GetField(enumName.ToString()).GetValue(enumName));
|
||
|
}
|
||
|
}
|
||
|
}
|