私が持っている場合:
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
SomeAttr
それがどのプロパティに付けられているかを知ることは可能ですか? 少なくともそれが何でType
あるかを知ることは可能property
ですか?
私が持っている場合:
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
SomeAttr
それがどのプロパティに付けられているかを知ることは可能ですか? 少なくともそれが何でType
あるかを知ることは可能property
ですか?
いいえ、その逆しかできません。プロパティに(リフレクションを介して)どのような属性があるかを問い合わせることができます。
Attribute.GetCustomAttributes(prop, true);
prop は、プロパティ SomeProperty を記述する MemberInfo クラスから派生したオブジェクトです。次に、返された属性を繰り返し処理して、自分の属性が含まれているかどうかを確認します。
いいえ、できません。直接ではありません。
属性を収集するときにできることは、その属性に追加情報を設定することです。
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
メソッド、フィールドなどをサポートすることもできます。)