我正在尝试检查某个属性是否已应用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
答案 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));