2009-01-10 78 views
1

我有一個任務狀態的枚舉。有些狀態被認爲是過時的,我已經將其標記爲過時,如下所示:如何檢查或查找.NET屬性?

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

你可以寫一個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); 
+0

謝謝!完美工作! – mattruma 2009-01-10 01:50:54

1
Type enumType = typeof(testEnum); 
enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)[i].GetCustomAttributes(true); 

然後你就可以通過數組使用方法的選擇循環,如果有任何自定義屬性檢查。

+0

heh看起來像我真的很慢這一次... linq方法是不錯的;-) – JoshBerke 2009-01-10 01:41:59