Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过描述获取枚举值_C#_.net_Enums - Fatal编程技术网

C# 通过描述获取枚举值

C# 通过描述获取枚举值,c#,.net,enums,C#,.net,Enums,可能重复: 我有一个使用descriptions属性的枚举。我希望能够基于传入的字符串设置对象->属性值。如果字符串与枚举值描述中的一个匹配,则应选择该值。我是否可以在不使用冗长for循环的情况下完成此操作 public enum Rule { .... [Description("New Seed")] Rule2 = 2, .... } 我所希望的是 var object = new oject{ rule = Rule.Where(r=>

可能重复:

我有一个使用descriptions属性的枚举。我希望能够基于传入的字符串设置对象->属性值。如果字符串与枚举值描述中的一个匹配,则应选择该值。我是否可以在不使用冗长for循环的情况下完成此操作

public enum Rule
{
     ....
     [Description("New Seed")]
     Rule2 = 2,
     ....
}
我所希望的是

var object = new oject{ rule = Rule.Where(r=> r.description == rulestring)}

ref:

您不能这样做,属性是元数据而不是真实数据(即不是实际值)。我用自己的
StringValueAttribute
和一些扩展方法来模拟这样的东西,但这有局限性,你必须连接支持的基础设施。@CodingGorilla我不明白你的意思。枚举枚举值,并找到具有特定描述的值应该不难。@CodeInChao如果他想将
description
属性作为
规则
enum的一个成员,你不能这样做。我要做的是在
Enum
类型上使用一些扩展方法来提取属性(在我的例子中,我称之为
StringValueAttribute
)元数据并返回它。这并不难,只是和他要求的不一样。它可能会变得有点棘手,因为您正在扩展
Enum
类型,而不是
Enum
的特定实现。该链接实际上是一个完全重复的链接。是的,我只是为了方便起见才这样写。因为它是完全重复的,所以线程应该相应地关闭,虽然我现在看到你没有足够的代表投票。将来,如果你看到一个完全重复的问题,你可以用一个链接来评论,说这是一个完全重复的问题,而不是对重复的问题重新发布相同的答案。只是想帮助你,但我会记住。。。
        Rule f;
        var type = typeof(Rule);
        foreach (var field in type.GetFields())
        {
            var attribute = Attribute.GetCustomAttribute(field,
                typeof(DescriptionAttribute)) as DescriptionAttribute;
            if (attribute != null)
            {
                if (attribute.Description == "description"){
                    f = (Rule)field.GetValue(null);
                break;}
            }
            else
            {
                if (field.Name == "description"){
                    f = (Rule)field.GetValue(null);
                break;}
            }
        }