System.Reflection;Создать список полей (определенного типа) - PullRequest
2 голосов
/ 20 октября 2011

У меня есть класс, который имеет большое количество статических полей определенного типа, скажем, Foo.Чтобы упростить и сократить код, я подумал о том, чтобы поместить их в массив (т.е., конечно, их ссылки).

Я могу сделать это, просто записав каждое имя поля в явном виде и поместив их в Список / Массив ... (т.е. myList.Add(this.A)) .. но так как у меня много этих полей, и они иногда меняются,хочу сделать все это через Reflection .. должно быть возможно, нет?

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;
    }
}

1 Ответ

4 голосов
/ 20 октября 2011

Используйте это:

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();
}
...