如何检查或查找.NET属性?

时间:2009-01-10 01:24:26

标签: c# .net attributes

我有一个任务状态的枚举。一些状态被认为是过时的,我将它们标记为过时,如下所示:

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
}

在我的用户界面中,我使用枚举值填充下拉列表,但我想忽略标记为过时的值。我怎么会这样做?

3 个答案:

答案 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,我知道有一个可以隐藏属性资源管理器,但似乎无法记住名称。