2

我有一个类,它有大量某种类型的静态字段Foo,比如说。为了简化和缩短代码,我考虑将它们放入一个数组中(当然也就是它们的引用)。

我可以通过简单地明确写出每个字段名称并将它们放入列表/数组中来做到这一点..(即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

1 回答 1

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();
}
于 2011-10-20T12:46:14.123 回答