gpt4 book ai didi

C# - 通过属性获取所有枚举值

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:32 27 4
gpt4 key购买 nike

我有以下枚举:

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

我想获取所有枚举类型为“任务”的枚举的列表。

我该怎么做?

最佳答案

这样的事情应该会让你上路......

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();

如果你想要 int 值,那么就转换它:

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();

和全 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();

关于C# - 通过属性获取所有枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com