Получить CustomAttributes конкретного участника
-
03-07-2019 - |
Вопрос
Есть ли способ получить пользовательские атрибуты конкретного объекта, который я получаю в методе?
Я не хочу и не могу перебирать Type.GetMembers() и искать своего участника.У меня есть объект, который также является членом и имеет атрибут.
Как получить атрибут?
class Custom
{
[Availability]
private object MyObject = "Hello";
private void Do(object o)
{
//does object 'o' has any custom attributes of type 'Availability'?
}
//somewhere I make the call: Do(MyObject)
}
Решение
Нет.У объектов нет атрибутов, у членов они есть.К тому времени, когда вы находитесь в методе «Do», нет никакой записи о том, что вы вызвали Do(MyObject) vs Do(MyOtherFieldWhichHasTheSameValue).
Если вам нужно найти атрибуты члена, вам, по сути, придется передать соответствующий MemberInfo, а не то, что он оценивает.
Другие советы
Вы не можете сделать это без хотя бы 1 вызова отражения.После этого как-нибудь сохраните значение.
Пример:
abstract MyBase
{
public string Name;
protected MyBase()
{
//look up value of Name attribute and assign to Name
}
}
[Name("Foo")]
class MyClass : MyBase
{
}
Не связан с StackOverflow