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;}
}
}