11

我想收集放置在属性上的所有自定义属性。有多个相同类型的 Attributes 分配给了 Property,但是在收集它们时,生成的集合只包含特定类型的第一个 Attribute:

属性类

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

public class ConditionAttribute : Attribute{...}

用法:

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

现在,当遍历对象“值”的所有道具时,其类包含道具“BackColor”:

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

集合属性。属性仅包含一个“ConditionAttribute”类型的属性:具有“Test1”的属性。其他的被忽略;-(

那么 AllowMultiple 不适用于 Property Attributes 吗?

提前致谢

亨里克

4

3 回答 3

22

根据MSDN 上的一篇文章,这是设计为 PropertyDescriptor 类的一部分。

但是,您实际上可以通过在自定义属性中覆盖 TypeId 来解决问题(感谢Mindscape的 Ivan 指出这一点):

public override object TypeId
{
  get
  {
    return this;
  }
}
于 2009-09-02T03:11:39.167 回答
1

是的,它确实有效。不知道为什么它不能通过 PropertyDescriptors 工作。

你总是可以这样做:Attribute.GetCustomAttributes(methodInfo, typeof(ConditionAttribute))

于 2009-05-11T15:37:32.113 回答
0

另一种调整方法,

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

在您的验证代码中,

Dim lstProperties() As String = _ChkColors.Split(",") For each strProp as string in lstPropertyes '你的验证'返回 Next

于 2018-01-24T11:23:00.650 回答