AllowMultiple不适用于属性属性?

时间:2009-05-11 15:33:47

标签: attributes custom-attributes

我想收集放置在Property上的所有自定义属性。分配给属性的同一类型有多个属性,但在收集它们时,结果集合仅包含特定类型的第一个属性:

属性类

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

public class ConditionAttribute : Attribute{...}

用法:

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

现在循环遍历对象'value'的所有Props,其类包含Prop“BackColor”:

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

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

AllowMultiple对Property Attributes不起作用吗?

提前致谢

的Henrik

3 个答案:

答案 0 :(得分:18)

根据a post on MSDN,这是设计为PropertyDescriptor类的一部分。

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

public override object TypeId
{
  get
  {
    return this;
  }
}

答案 1 :(得分:1)

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

您可以随时执行:Attribute.GetCustomAttributes(methodInfo, typeof(ConditionAttribute))

答案 2 :(得分:0)

另一种调整方式,

[ConditionAttribute( “测试1,的Test2,Test3的”)] public Color BackColor {get;设置;}

并在验证码中

Dim lstProperties()As String = _ChkColors.Split(“,”) 对于每个strProp作为lstPropertyes中的字符串   '你的验证   '回归 下一步