2015-09-30 3 views
8

Я пытаюсь проверить, имеет ли свойство атрибут. Это используется, чтобы сделать с:Где был найден атрибут.IsDefined в DNX Core 5.0?

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

Однако я получаю предупреждение, что это не доступно в DNX Ядра 5.0 (она по-прежнему находится в DNX 4.5.1).

Был ли он еще не реализован или он перемещался, как материал, связанный с другим типом/отражением?

Я использую бета7.

ответ

10

Edit:
Там на самом деле, как представляется, метод IsDefined расширения в System.Reflection.Extensions пакете. Использование:

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

Вам необходимо включить пространство имен System.Reflection. Исходный код ссылки можно найти here. Около MemberInfo, он работает на Assembly, Module и ParameterInfo тоже.

Это possibly faster, чем с использованием GetCustomAttribute.


Оригинальное сообщение:

Похоже, он не портирован на .NET Ядра еще. В среднем в то время как вы можете использовать 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>(); 
+0

Спасибо за отличное предложение. К сожалению, это не работает. Он всегда возвращает null. 'GetCustomAttributes' вообще не содержит моего атрибута. – SaphuA

+0

@SaphuA Я добавил пример. Можете ли вы показать, как выглядит ваш код? –

+0

Угадай, что ты прав! Не уверен, что я сделал неправильно в своем тесте ... Спасибо! – SaphuA

Смежные вопросы