我正在尝试检查属性是否具有属性。过去,这是通过以下方式完成的:

Attribute.IsDefined(propertyInfo, typeof(AttributeClass));

但是,我收到一条警告,说它在DNX Core 5.0中不可用(在DNX 4.5.1中仍然可用)。

它尚未被实现,还是像其他类型/反射相关的东西一样被移动?

我正在使用beta7。

最佳答案

编辑:
实际上, IsDefined 包中似乎有一个System.Reflection.Extensions扩展方法。用法:

var defined = propertyInfo.IsDefined(typeof(AttributeClass));

您需要包括System.Reflection命名空间。引用源代码可以在here中找到。除了MemberInfo之外,它也适用于AssemblyModuleParameterInfo

与使用GetCustomAttribute相比,这是possibly faster

原始帖子:

看起来它尚未移植到.NET Core。同时,您可以使用GetCustomAttribute来确定是否在属性上设置了属性:
bool defined = propertyInfo.GetCustomAttribute(typeof(AttributeClass)) != null;

您可以将其烘焙为扩展方法:
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;
    }
}

并像这样使用它:
bool defined = propertyInfo.IsAttributeDefined<AttributeClass>();

关于c# - DNX Core 5.0中Attribute.IsDefined放在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32860947/

10-13 09:54