2011-10-20 4 views
2

私はある種のの静的フィールド(例えば、Foo)の多数のクラスを持っています。コードを簡素化し、短縮するために、私はそれらを配列に入れようと考えました。System.Reflection;

私は単純に各フィールド名を明示的に書き出してList/Array ..(つまりmyList.Add(this.A))に入れることで実現できますが、私はこれらのフィールドをたくさん持っているので時々変更します。反射を介してすべて可能でなければならない、いいえ?

public class MyClass 
{ 
    public static Foo A = new Foo(...); 
    public static Foo B = new Foo(...); 
    public static Foo C = new Foo(...); 
    (...) 

    public List<Foo> getFoos() 
    { 
     MemberInfo[] allFooFields = typeof(MyClass).GetFields(); 

     // Fill In Foo Fields into a List 
     var listOfFooFields = new List<Foo>; 

     // ??? 

     return listOfFooFields; 
    } 
} 

答えて

4

使用この:

public List<Foo> getFoos() 
{ 
    return typeof(MyClass).GetFields(BindingFlags.Static | BindingFlags.Public) 
          .Where(x => x.FieldType == typeof(Foo)) 
          .Select(x => x.GetValue(null)) 
          .Cast<Foo>() 
          .ToList(); 
} 
関連する問題