1

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

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
}

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

4

3 回答 3

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);
于 2009-01-10T01:32:02.180 回答
1
Type enumType = typeof(testEnum);
enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)[i].GetCustomAttributes(true);

然后您可以使用您选择的方法循环遍历数组并检查是否有任何自定义属性。

于 2009-01-10T01:41:13.270 回答
0

您可以使用DebuggerHiddenAttribute,我知道有一个可以隐藏属性资源管理器,但似乎不记得名称。

于 2009-01-10T01:27:52.657 回答