2011-01-05 6 views

答えて

5

属性は、型、型自体、メソッドパラメータ、またはアセンブリのメンバに適用されるメタデータです。あなたは、メタデータへのアクセス権を持っているために、あなたの場合はTypePropertyInfoFieldInfoなど

のインスタンス、つまり、私は実際にプロパティの名前を渡す、ユーザーGetCustomAttributesなどにオリジナルメンバー自身を持っている必要があります属性自体:

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

私は、これはプロパティ名を渡すことで解決することができます知っているおかげで、私はプロパティ名を渡さずに、これを行うつもりです。あなたの応答に基づいて、それは不可能です。 – Sadegh

+0

不可能です。アトリビュートには、アタッチされているメンバーに関する情報が渡されません。これは、 'Attribute'インスタンスが作成された' ICustomAttributeProvider'を渡された場合に便利ですが、悲しいことにそうではありません。 –

+0

Matthewに感謝します。 – Sadegh

0

属性クラス自体ではできません。しかし、のメソッドを持ち、オブジェクトを受け取るメソッドは、その属性を使用するオブジェクトのプロパティ(存在する場合)のリストを取得します。それを実装するために、このAPIを使用します.NET 4.5からCallerMemberNameAttributeを使用してhttp://msdn.microsoft.com/en-us/library/ms130869.aspx

+0

OK(私はあなたのアプローチのように)たくさんの方法を知っていますが、それらのどれも私の場合です。 – Sadegh

95

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

驚くばかりです。プロジェクト全体でプロパティを装飾するために使用する必要のある属性のパラメータを保存します。 – Ellesedil

+6

これは受け入れられた答え、感謝の男でなければなりません! –

+1

これを探していましたが、うまくいきませんでした[enums](http://stackoverflow.com/q/28094024/465942)残念ながら.. –

関連する問題