0

私が持っている場合:

[SomeAttr]
public Int32 SomeProperty
{
  get; set;
}

SomeAttrそれがどのプロパティに付けられているかを知ることは可能ですか? 少なくともそれが何でTypeあるかを知ることは可能propertyですか?

4

2 に答える 2

0

いいえ、その逆しかできません。プロパティに(リフレクションを介して)どのような属性があるかを問い合わせることができます。

Attribute.GetCustomAttributes(prop, true);

prop は、プロパティ SomeProperty を記述する MemberInfo クラスから派生したオブジェクトです。次に、返された属性を繰り返し処理して、自分の属性が含まれているかどうかを確認します。

于 2013-05-17T13:01:14.947 に答える
0

いいえ、できません。直接ではありません。

属性を収集するときにできることは、その属性に追加情報を設定することです。

class SomeAttr: Attribute
{
    public PropertyInfo Target {get;set;}
}

...そして、情報を収集したら:

Type type = ... // The type which holds the property.
PropertyInfo propertyInfo = typeo.GetProperty("SomeProperty");
Type propertyType = propertyInfo.PropertyType;
SomeAttr attr = propertyInfo.GetCustomAttributes(false).OfType<SomeAttr>().FirstOrDefault();
attr.Target = propertyInfo; // <== Set the target information.

このようにして、コードの別のポイントでいつでもターゲット メンバーを取得できます。

public void DoSomethingWithAttribute(SomeAttr attr)
{
    PropertyInfo whichProperty = attr.Target;
}

( baseclass を使用して、MemberInfoメソッド、フィールドなどをサポートすることもできます。)

于 2013-05-17T12:58:40.147 に答える