1

メソッドで受け取った特定のオブジェクトのカスタム属性を取得する方法はありますか?

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)

}
4

2 に答える 2

2

いいえ。オブジェクトには属性がありません。メンバーには属性があります。「Do」メソッドに入るまでに、Do(MyObject) と Do(MyOtherFieldWhichHasTheSameValue) を呼び出したという記録はありません。

メンバーの属性を検索する必要がある場合は、基本的に、評価対象ではなく、関連する MemberInfo を渡す必要があります。

于 2008-10-15T12:52:15.053 に答える
1

少なくとも 1 回の Reflection 呼び出しがないと、これを行うことはできません。その後、何らかの方法で値を保存します。

例:

abstract MyBase
{
  public string Name;
  protected MyBase()
  {
    //look up value of Name attribute and assign to Name
  } 
}

[Name("Foo")]
class MyClass : MyBase
{
}
于 2008-10-15T12:50:07.787 に答える