如何获取属性设置的属性名称?

时间:2011-01-05 17:13:00

标签: c# reflection attributes

我打算不将任何参数传递给属性!有可能吗?

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

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

3 个答案:

答案 0 :(得分:134)

使用.NET 4.5中的CallerMemberNameAttribute

public CustomAttribute([CallerMemberName] string propertyName = null)
{
    // ...
}

答案 1 :(得分:4)

属性是应用于类型成员,类型本身,方法参数或程序集的元数据。要让您有权访问元数据,您必须将原始成员本身提供给用户GetCustomAttributes等,即您的TypePropertyInfoFieldInfo等实例。< / p>

在您的情况下,我实际上会将属性的名称传递给属性本身:

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; }
}

答案 2 :(得分:0)

你不能在属性类本身内完成它。但是,可以拥有一个方法,该方法使对象获取使用该属性的该对象属性(如果有)的列表。使用此API实现:http://msdn.microsoft.com/en-us/library/ms130869.aspx