Как получить название свойства, для которого установлен наш атрибут? - PullRequest
30 голосов
/ 05 января 2011

Я собираюсь сделать это без передачи какого-либо параметра в атрибут! Возможно ли это?

class MyAtt : Attribute {
    string NameOfSettedProperty() {
        //How do this? (Would be MyProp for example)
    }
}

class MyCls {
    [MyAtt]
    int MyProp { get { return 10; } }
}

Ответы [ 3 ]

136 голосов
/ 01 апреля 2013

Использование CallerMemberNameAttribute из .NET 4.5:

public CustomAttribute([CallerMemberName] string propertyName = null)
{
    // ...
}
4 голосов
/ 05 января 2011

Атрибуты - это метаданные, применяемые к элементам типа, самого типа, параметров метода или сборки.Чтобы иметь доступ к метаданным, у вас должен быть сам исходный член для пользователя GetCustomAttributes и т. Д., Т.е. ваш экземпляр Type, PropertyInfo, FieldInfo и т. Д.

В вашем случаеЯ бы фактически передал имя свойства самому атрибуту:

public CustomAttribute : Attribute
{
  public CustomAttribute(string propertyName)
  {
    this.PropertyName = propertyName;
  }

  public string PropertyName { get; private set; }
}

public class MyClass
{
  [Custom("MyProperty")]
  public int MyProperty { get; set; }
}
0 голосов
/ 05 января 2011

вы не можете сделать это внутри самого класса атрибута.однако, вы можете иметь метод, который принимает объект, получает список свойств этого объекта (если есть), которые используют атрибут.используйте этот API для реализации: http://msdn.microsoft.com/en-us/library/ms130869.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...