C# - 通过属性获取所有枚举值 [英] C# - Getting all enums value by attribute
本文介绍了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屋!
查看全文