I'm trying to check if a property has an attribute. This used to be done with:
Attribute.IsDefined(propertyInfo, typeof(AttributeClass));
However I get a warning that it's not available in DNX Core 5.0 (it still is in DNX 4.5.1).
Has it not been implemented yet or has it moved like other type/reflection related stuff?
I'm using beta7.
Edit:
There actually seems to be an IsDefined extension method in the System.Reflection.Extensions package. Usage:
var defined = propertyInfo.IsDefined(typeof(AttributeClass));
You need to include the System.Reflection namespace. The reference source code can be found here. Beside MemberInfo, it works on Assembly, Module and ParameterInfo too.
This is possibly faster than using GetCustomAttribute.
Looks like it's not ported to .NET Core yet. In the mean while you can use GetCustomAttribute to determine whether an attribute is set on a property:
bool defined = propertyInfo.GetCustomAttribute(typeof(AttributeClass)) != null;
You could bake this into an extension method:
public static class MemberInfoExtensions
{
public static bool IsAttributeDefined<TAttribute>(this MemberInfo memberInfo)
{
return memberInfo.IsAttributeDefined(typeof(TAttribute));
}
public static bool IsAttributeDefined(this MemberInfo memberInfo, Type attributeType)
{
return memberInfo.GetCustomAttribute(attributeType) != null;
}
}
And use it like this:
bool defined = propertyInfo.IsAttributeDefined<AttributeClass>();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With