C# - 通过属性获取所有枚举值 [英] C# - Getting all enums value by attribute

查看:467
本文介绍了C# - 通过属性获取所有枚举值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下枚举:

  public enum KodEnum 
{
[EnumType(EnumType = 任务)]
TaskTab,
[EnumType(EnumType =Task)]
TaskReason,
[EnumType(EnumType =Action)]
ActionTab ,
[EnumType(EnumType =Action)]
ActionReason
}

public class EnumTypeAttribute:Attribute
{
public string EnumType {get;组; }
}

而且我想得到一个列出了所有具有枚举类型的枚举的任务。



我该怎么做?

解决方案

这样的东西应该让你在路上...

  var enumValues =(from memberof(KodEnum).GetFields ()
let att = member.GetCustomAttributes(false)
.OfType&EnumTypeAttribute>()
.FirstOrDefault()
其中att!= null&& att.EnumType ==Task
select member.GetValue(null))
.Cast< KodEnum>()
.ToList();

如果你想要int值,然后只是转换它:

  var enumValues =(来自typeof(KodEnum)中的成员.GetFields()
let att = member.GetCustomAttributes(false)
.OfType& EnumTypeAttribute>()
.FirstOrDefault()
其中att!= null&& att.EnumType ==Task
select(int)member.GetValue(null))
.ToList();

和全lambda解决方案:

  var enumValues = typeof(KodEnum)
.GetFields()
.Select(x => new
{
att = x.GetCustomAttributes (false)
.OfType&EnumTypeAttribute>()
.FirstOrDefault(),
member = x
})
.Where(x => x.att != null&&& x.att.EnumType ==Task)
.Select(x =>(int)x.member.GetValue(null))
.ToList();


I have this following enum :

public enum KodEnum
{
    [EnumType(EnumType = "Task")]
    TaskTab,
    [EnumType(EnumType = "Task")]
    TaskReason,
    [EnumType(EnumType = "Action")]
    ActionTab,
    [EnumType(EnumType = "Action")]
    ActionReason
}

public class EnumTypeAttribute : Attribute
{
    public string EnumType { get; set; }
}

And I want to get a list of all the enums that have the EnumType of "Task".

How could I do that?

解决方案

Something like this should get you on the way...

var enumValues = (from member in typeof(KodEnum).GetFields()
                  let att = member.GetCustomAttributes(false)
                                  .OfType<EnumTypeAttribute>()
                                  .FirstOrDefault()
                  where att != null && att.EnumType == "Task"
                  select member.GetValue(null))
                 .Cast<KodEnum>()
                 .ToList();

If you want the int value, then just cast it:

var enumValues = (from member in typeof(KodEnum).GetFields()
                  let att = member.GetCustomAttributes(false)
                                  .OfType<EnumTypeAttribute>()
                                  .FirstOrDefault()
                  where att != null && att.EnumType == "Task"
                  select (int)member.GetValue(null))
                 .ToList();

And all-lambda solution:

        var enumValues = typeof(KodEnum)
            .GetFields()
            .Select(x => new 
                { 
                    att = x.GetCustomAttributes(false)
                             .OfType<EnumTypeAttribute>()
                             .FirstOrDefault(), 
                    member = x 
                })
            .Where(x => x.att != null && x.att.EnumType == "Task")
            .Select(x => (int)x.member.GetValue(null))
            .ToList();

这篇关于C# - 通过属性获取所有枚举值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆