12

我正在尝试检查属性是否应用了 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))

返回空

4

3 回答 3

31

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

PropertyDescriptor targetProp = targetProps[i];
bool hasDataMember = targetProp.Attributes.OfType<DataMemberAttribute>().Any();
于 2012-06-29T10:24:28.487 回答
1

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

基本上你可以使用:

bool hasDataMember = Attribute.IsDefined(property, typeof(DataMemberAttribute));
于 2015-07-08T11:24:29.830 回答
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());
    

最良好的问候!

于 2020-03-07T17:09:23.563 回答