特定のメンバーのCustomAttributesを取得します
-
03-07-2019 - |
質問
メソッドで受け取る特定のオブジェクトのカスタム属性を取得する方法はありますか?
Type.GetMembers()を反復処理してメンバーを検索することは望ましくありませんし、できません。属性を持っているメンバーでもあるオブジェクトがあります。
属性を取得するにはどうすればよいですか
class Custom
{
[Availability]
private object MyObject = "Hello";
private void Do(object o)
{
//does object 'o' has any custom attributes of type 'Availability'?
}
//somewhere I make the call: Do(MyObject)
}
解決
いいえ。オブジェクトには属性がありません-メンバーにはあります。あなたが「やる」ことになるまでにはメソッド、Do(MyObject)対Do(MyOtherFieldWhichHasTheSameValue)を呼び出したという事実の記録はありません。
メンバーの属性を検索する必要がある場合は、基本的に、評価の結果ではなく、関連するMemberInfoを渡す必要があります。
他のヒント
これを行うには、少なくとも1つのReflectionコールが必要です。その後、何らかの方法で値を保存します。
例:
abstract MyBase
{
public string Name;
protected MyBase()
{
//look up value of Name attribute and assign to Name
}
}
[Name("Foo")]
class MyClass : MyBase
{
}
所属していません StackOverflow