AllowMultiple не работает с атрибутами атрибутов? - PullRequest
7 голосов
/ 11 мая 2009

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

Класс атрибутов

[AttributeUsage(System.AttributeTargets.Property,
               AllowMultiple = true)]

public class ConditionAttribute : Attribute{...}

Использование:

[ConditionAttribute("Test1")]
[ConditionAttribute("Test2")]
[ConditionAttribute("Test3")]
public Color BackColor{get; set;}

Теперь при циклическом прохождении всех Props объекта 'value', класс которого содержит Prop "BackColor":

foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value))
{
  foreach (Attribute attribute in property.Attributes)
  {   ... }
   ....
}

свойство коллекции. Атрибуты содержат только ОДИН атрибут типа «ConditionAttribute»: атрибут с «Test1». Остальные игнорируются ;-(

Так что AllowMultiple не работает для атрибутов свойств?

Заранее спасибо

Хенрик

Ответы [ 3 ]

18 голосов
/ 02 сентября 2009

Согласно сообщению на MSDN , оно является частью класса PropertyDescriptor.

Однако вы можете решить проблему, переопределив TypeId в своем пользовательском атрибуте (спасибо Ивану из Mindscape за указание на это):

public override object TypeId
{
  get
  {
    return this;
  }
}
1 голос
/ 11 мая 2009

Да, это работает. Не уверен, почему он не работает через PropertyDescriptors.

Вы всегда можете сделать: Attribute.GetCustomAttributes(methodInfo, typeof(ConditionAttribute))

0 голосов
/ 24 января 2018

Еще один способ настроить это,

[ConditionAttribute ( "Test1, Test2, Test3")] public Color BackColor {get; установить;}

и в вашем коде подтверждения,

Dim lstProperties () As String = _ChkColors.Split (",") Для каждого strProp как строка в lstPropertyes ваша проверка ' вернуть Следующий

...