0

我想使用类似的东西:

object ob;
            var props = ob.GetType().GetProperties();

            List<Element> list = new List<Element>();
            foreach (var prop in props)
            {
                if (prop.PropertyType == typeof(String))
                    list.Add(makeStringProperty(prop));
                else if (prop.PropertyType == typeof(int))
                    list.Add(makeIntProperty(prop));
                else
                {
                }
            }

它将给定对象中的每个属性添加到给定列表中。现在我想添加一个子句来添加枚举变量,包括通过 Enum.GetValues() fe 获取其所有值。这对于任何一个给定的枚举来说都很容易,但我希望这对于每个可能的枚举都是通用的,所以例如如果 ob 会有:

enum Weather {
sunny,
rainy,
cloudy
}
Weather weather = sunny;

enum Places {
beach,
mall,
home
}
Places place = beach;

我将能够自己获取两个变量以及两个枚举的所有值。当然我不能直接检查 typeof(Enum) 或任何东西。有人有线索吗?

4

2 回答 2

1
else if(prop.PropertyType.IsEnum)
{
    var values = Enum.GetValues(prop.PropertyType);
}
于 2013-01-27T15:06:10.390 回答
0

有点像

typeof(Weather).GetFields()

或者

ob.GetType().GetFields()

如果您想直接在enum类型上使用反射。an 的成员enum是一种static字段。

但你也可以使用

Enum.GetValues(ob.GetType())

无论如何,如果有疑问,您应该首先检查它是否是枚举:

var typeOfOb = ob.GetType();
if (typeOfOb.IsEnum)
{
  // use Enum.GetValues(typeOfOb) here
}

注意:System.Type是用于类型确定的编译时(如typeof(Weather))和类型确定的运行时(如 )的类ob.GetType()。因此,您可以将两者都用作GetValues(System.Type)静态方法的参数。

于 2013-01-27T15:02:01.427 回答