Get Enum from Description attribute(从描述属性中获取枚举)
                            本文介绍了从描述属性中获取枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
可能重复:
通过描述属性查找枚举值 
我有一个通用扩展方法,它从 Enum 获取 Description 属性:
I have a generic extension method which gets the Description attribute from an Enum:
enum Animal
{
    [Description("")]
    NotSet = 0,
    [Description("Giant Panda")]
    GiantPanda = 1,
    [Description("Lesser Spotted Anteater")]
    LesserSpottedAnteater = 2
}
public static string GetDescription(this Enum value)
{            
    FieldInfo field = value.GetType().GetField(value.ToString());
    DescriptionAttribute attribute
            = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute))
                as DescriptionAttribute;
    return attribute == null ? value.ToString() : attribute.Description;
}
所以我可以...
string myAnimal = Animal.GiantPanda.GetDescription(); // = "Giant Panda"
现在,我正在尝试在另一个方向上计算出等效的功能,例如...
now, I'm trying to work out the equivalent function in the other direction, something like...
Animal a = (Animal)Enum.GetValueFromDescription("Giant Panda", typeof(Animal));
推荐答案
public static class EnumEx
{
    public static T GetValueFromDescription<T>(string description) where T : Enum
    {
        foreach(var field in typeof(T).GetFields())
        {
            if (Attribute.GetCustomAttribute(field,
            typeof(DescriptionAttribute)) is DescriptionAttribute attribute)
            {
                if (attribute.Description == description)
                    return (T)field.GetValue(null);
            }
            else
            {
                if (field.Name == description)
                    return (T)field.GetValue(null);
            }
        }
        throw new ArgumentException("Not found.", nameof(description));
        // Or return default(T);
    }
}
用法:
var panda = EnumEx.GetValueFromDescription<Animal>("Giant Panda");
                        这篇关于从描述属性中获取枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:从描述属性中获取枚举
				
        
 
            
        基础教程推荐
             猜你喜欢
        
	     - 首先创建代码,多对多,关联表中的附加字段 2022-01-01
 - JSON.NET 中基于属性的类型解析 2022-01-01
 - 错误“此流不支持搜索操作"在 C# 中 2022-01-01
 - 全局 ASAX - 获取服务器名称 2022-01-01
 - 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
 - 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
 - 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
 - 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
 - 如何动态获取文本框中datagridview列的总和 2022-01-01
 - 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
						
						
						
						
						
				
				
				
				