有没有一种方法可以直接从getter或setter访问属性的属性?

时间:2019-01-10 16:11:45

标签: .net vb.net reflection

我有一个看起来像这样的属性:

<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变量所包含的吸气剂。是否有一种方便直接的方法来获取“父”方法库,而无需获取getter的名称,剥离开头的“ get_”并搜索类的属性以获取该属性的属性?我看不到,但也许我忽略了它。

1 个答案:

答案 0 :(得分:2)

当然,没有绝对的直接方法,但是您可以对其进行相当安全的搜索(不涉及任何字符串)。看这个例子:

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