检查PropertyDescriptor是否具有属性

时间:2012-06-29 10:18:56

标签: c# .net

我正在尝试检查某个属性是否已应用DataMemberAttribute(使用TypeDescriptor)

这就是我现在所拥有的:

PropertyDescriptor targetProp = targetProps[i];

var has = argetProp.Attributes.Contains(
Attribute.GetCustomAttribute(typeof(DataMemberAttribute).Assembly,typeof(DataMemberAttribute)));

问题在于

Attribute.GetCustomAttribute(typeof(DataMemberAttribute).Assembly,typeof(DataMemberAttribute))

返回null

3 个答案:

答案 0 :(得分:22)

您可以使用LINQ。 .OfType<T>().Any()扩展方法链可以很好地完成工作:

PropertyDescriptor targetProp = targetProps[i];
bool hasDataMember = targetProp.Attributes.OfType<DataMemberAttribute>().Any();

答案 1 :(得分:1)

有3种方法:

  • 第一个:

    PropertyDescriptor targetProp = targetProps[i];
    bool hasDataMember = targetProp.Attributes.Contains(new DataMemberAttribute());
    
  • 第二个:

    PropertyDescriptor targetProp = targetProps[i];
    bool hasDataMember = targetProp.Attributes.OfType<DataMemberAttribute>().Any();
    
  • 第三:

    PropertyDescriptor targetProp = targetProps[i];
    bool hasDataMember = targetProp.Attributes.Matches(new DataMemberAttribute());
    

最好的问候!

答案 2 :(得分:0)

在那里找到了一个更好的答案:https://stackoverflow.com/a/2051116/605586

基本上你可以使用:

bool hasDataMember = Attribute.IsDefined(property, typeof(DataMemberAttribute));