Есть ли способ получить прямой доступ к атрибутам свойства из геттера или сеттера? - PullRequest
0 голосов
/ 10 января 2019

У меня есть свойство, которое выглядит так:

<DataElement(0, 4)>
Private Property RiffId As String
   Get
      Dim mb As MethodBase = MethodBase.GetCurrentMethod()
      Dim de As DataElementAttribute = mb.GetCustomAttribute(Of DataElementAttribute)()
      ...
  End Get
  Set(value As String)
     ...
  End Set
End Property

(Этот проект VB, но ответы на C # приветствуются.)

Переменная de содержит значение null / Nothing, поскольку атрибут применяется ко всему свойству, а не к получателю, как и в переменной mb. Есть ли удобный и прямой способ добраться до «родительского» метода, не получая имя получателя, удаляя начальный «get_» и не ища свойства класса, чтобы получить атрибуты свойства? Я не вижу ни одного, но, возможно, я упускаю это из виду.

1 Ответ

0 голосов
/ 10 января 2019

Ну, нет абсолютного прямого пути, но вы можете найти его довольно безопасно (без каких-либо условий). Посмотрите на этот пример:

using System;
using System.Linq;
using System.Reflection;

public class Program
{
    [ObsoleteAttribute("foo")]
    public static string MyProp
    {
        get
        {
            var mb = MethodBase.GetCurrentMethod();
            var prop = mb.DeclaringType.GetProperties().Single(x => x.GetGetMethod() == mb);
            return prop.GetCustomAttribute<ObsoleteAttribute>().Message;
        }
    }

    public static void Main()
    {
        Console.WriteLine(MyProp);
    }
}

Результат:

Foo

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