Получение всех свойств в классе, помеченном знаком - PullRequest
0 голосов
/ 22 июля 2011

Я создал собственный атрибут, который просто помечает свойство классов как «отображаемое имя». То, что я хотел бы сделать, это найти свойство в данном классе, которое было помечено моим атрибутом. Насколько я знаю, единственный способ, которым я могу это сделать, - пройтись по каждому свойству (с помощью отражения) и проверить, какие атрибуты он назначил. Есть ли более простой / быстрый способ, чем этот?

foreach (PropertyInfo property in myClassProperties)
{
  //Get the alias attributes.
  object[] attr=
  property.GetCustomAttributes(typeof(DisplayField), true);

  if(attr.Count() > 0)
  {
   // This is a display field!
  }
}

Спасибо

Ответы [ 3 ]

4 голосов
/ 22 июля 2011

Ну, это немного проще, чем проверка всех его атрибутов, чтобы найти тот, который вы хотите - вы можете спросить любого члена, имеет ли он определенный атрибут, используя IsDefined

var properties = type.GetProperties()
                     .Where(p => p.IsDefined(typeof(MyAttribute), false));

Очевидно, что вы можете кэшировать этот результат для каждого типа, если собираетесь использовать его несколько раз.

4 голосов
/ 22 июля 2011

Насколько я знаю, единственный способ, которым я могу это сделать, - пройтись по каждому свойству (с помощью отражения) и проверить, какие атрибуты он назначил.

Именно так и поступают.Атрибуты - это метаданные, которые вставляются в сборку во время компиляции.Чтобы получить к ним доступ во время выполнения, вам нужно Reflection.

0 голосов
/ 22 июля 2011

единственный более быстрый способ, который мне известен, - это создать словарь статически или в единичном формате, чтобы последующие посещения были быстрее. Иногда я делаю это кеширование, но делаю это точно так, как вы описали выше для функциональности получения атрибута.

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