web-dev-qa-db-ja.com

属性が設定されているプロパティの名前を取得するにはどうすればよいですか?

属性にパラメーターを渡さずにこれを行います!出来ますか?

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

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

属性は、型のメンバー、型自体、メソッドパラメーター、またはアセンブリに適用されるメタデータです。メタデータにアクセスするには、ユーザーGetCustomAttributesなどの元のメンバー自体、つまりTypePropertyInfoFieldInfoなどのインスタンスが必要です。

あなたの場合、実際にはプロパティの名前を属性自体に渡します:

_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; }
}
_
4
Matthew Abbott

.NET 4.5から CallerMemberNameAttribute を使用:

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

属性クラス自体の中でそれを行うことはできません。ただし、属性を使用するオブジェクトのプロパティ(存在する場合)のリストをオブジェクトが取得するメソッドをできます。このAPIを使用してそれを実装します: http://msdn.Microsoft.com/en-us/library/ms130869.aspx

0
Robert Levy