Как вам проверить или найти атрибуты .NET? - PullRequest
1 голос
/ 10 января 2009

У меня есть перечисление статуса для задачи. Некоторые из статусов считаются устаревшими, и я отметил их как устаревшие, как показано ниже:

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 ]

3 голосов
/ 10 января 2009

Вы можете написать 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 голос
/ 10 января 2009
Type enumType = typeof(testEnum);
enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)[i].GetCustomAttributes(true);

Затем вы можете использовать выбранный вами метод для циклического перемещения по массиву и проверки наличия каких-либо пользовательских атрибутов.

0 голосов
/ 10 января 2009

Вы можете использовать DebuggerHiddenAttribute , и я знаю, что есть один, который скрывает его от проводника свойств, но не может вспомнить имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...