2011-08-16 23 views
2

私の目標は、クラスプロパティの属性とその値を取得することです。例えば変数の属性値を取得する方法は?

、私はプロパティがバインド可能であるかどうかを確認するために属性「バインド可能な」持っている場合:

public class Bindable : Attribute 
{ 
    public bool IsBindable { get; set; } 
} 

をそして、私はPersonクラスを持っている:

public class Person 
{ 
    [Bindable(IsBindable = true)] 
    public string FirstName { get; set; } 

    [Bindable(IsBindable = false)] 
    public string LastName { get; set; } 
} 

にはどうすればいいのFirstNameのおよびLastNameのを得ることができます'Bindable'属性値?

public void Bind() 
    { 
     Person p = new Person(); 

     if (FirstName property is Bindable) 
      p.FirstName = ""; 
     if (LastName property is Bindable) 
      p.LastName = ""; 
    } 

ありがとうございます。

答えて

5

インスタンスは別の属性を持っていない - あなたは、そのメンバーのためタイプ(例えばType.GetProperties付き)を尋ねると、(例えばPropertyInfo.GetCustomAttributes)その属性のためにメンバーを依頼する必要があり。

編集:コメントごとに、属性についてはtutorial on MSDNがあります。

+1

MSDNでこれをカバー素敵[属性チュートリアル](http://msdn.microsoft.com/en-us/library/aa288454.aspx)があります。 –

+0

@Chris:ありがとうございます。 –

2

あなたがこの方法で試すことができます。

 public class Bindable : Attribute 
     { 
      public bool IsBindable { get; set; } 
     } 

     public class Person 
     { 
      [Bindable(IsBindable = true)] 
      public string FirstName { get; set; } 

      [Bindable(IsBindable = false)] 
      public string LastName { get; set; } 
     } 

     public class Test 
     { 
      public void Bind() 
      { 
       Person p = new Person(); 

       foreach (PropertyInfo property in p.GetType().GetProperties()) 
       { 

        try 
        { 
         Bindable _Attribute = (Bindable)property.GetCustomAttributes(typeof(Bindable), false).First(); 

         if (_Attribute.IsBindable) 
         { 
          //TODO 
         } 
        } 
        catch (Exception) { } 
       } 
      } 
     }