Учитывая свойство в классе с атрибутами - какой самый быстрый способ определить, содержит ли оно данный атрибут? Например:
[IsNotNullable]
[IsPK]
[IsIdentity]
[SequenceNameAttribute("Id")]
public Int32 Id
{
get
{
return _Id;
}
set
{
_Id = value;
}
}
Какой самый быстрый способ определить, например, что он имеет атрибут «IsIdentity»?
c#
performance
Otávio Décio
источник
источник
Attribute.IsDefined
удалит одну строку кода и уродливые массивы / приведение.[NotMapped]
в классе, но для его обнаружения необходимо использоватьAttribute.IsDefined(pi, typeof(NotMappedAttribute))
IsIdentity[] attr = pi.GetCustomAttributes<IsIdentity>(false);
Если вы используете .NET 3.5, вы можете попробовать использовать деревья выражений. Это безопаснее, чем размышления:
источник
Вы можете использовать общий (универсальный) метод для чтения атрибута по заданному MemberInfo
источник
Чтобы обновить и / или улучшить ответ @Hans Passant, я бы разделил извлечение свойства в метод расширения. Это имеет дополнительное преимущество удаления неприятной магической строки в методе GetProperty ()
Ваш тест сокращается до двух строк
источник
Если вы пытаетесь сделать это в PCL Portable Class Library (как я), то вот как вы можете это сделать :)
Затем вы можете проверить количество свойств, которые имеют это специальное свойство, если вам нужно.
источник
Теперь это можно сделать без деревьев выражений и методов расширения безопасным способом с помощью новой функции C #,
nameof()
например:nameof () была введена в C # 6
источник
Вы можете использовать метод Attribute.IsDefined
https://msdn.microsoft.com/en-us/library/system.attribute.isdefined(v=vs.110).aspx
Вы можете предоставить свойство, которое вы конкретно ищете, или вы можете перебрать все из них, используя отражение, что-то вроде:
источник
Это довольно старый вопрос, но я использовал
Мой метод имеет этот параметр, но он может быть построен:
Тогда в методе это:
источник