我有一个任务状态的枚举。一些状态被认为是过时的,我将它们标记为过时,如下所示:
public enum TaskStatus
{
[Description("")]
NotSet = 0,
Pending = 1,
Ready = 2,
Open = 3,
Completed = 4,
Closed = 5,
[Description("On Hold")][Obsolete]
OnHold = 6,
[Obsolete]
Canceled = 7
}
在我的用户界面中,我使用枚举值填充下拉列表,但我想忽略标记为过时的值。我怎么会这样做?
答案 0 :(得分:3)
您可以编写LINQ查询:
var availableTaks = typeof (TaskStatus).GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)
.Where(f => f.GetCustomAttributes(typeof (ObsoleteAttribute), false).Length == 0);
foreach(var task in availableTaks)
Console.WriteLine(task);
答案 1 :(得分:1)
Type enumType = typeof(testEnum);
enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)[i].GetCustomAttributes(true);
然后,您可以使用您选择的方法遍历数组并检查是否存在任何自定义属性。
答案 2 :(得分:0)
您可以使用DebuggerHiddenAttribute,我知道有一个可以隐藏属性资源管理器,但似乎无法记住名称。