Вопрос

Есть ли способ получить пользовательские атрибуты конкретного объекта, который я получаю в методе?

Я не хочу и не могу перебирать 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
{
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top