繁体   English   中英

反思以及如何处理枚举

[英]Reflection and how to handle enums

我想使用类似的东西:

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)或其他任何东西。 有人有线索吗?

else if(prop.PropertyType.IsEnum)
{
    var values = Enum.GetValues(prop.PropertyType);
}

就像

typeof(Weather).GetFields()

要么

ob.GetType().GetFields()

如果要直接在enum类型上使用反射。 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)静态方法的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM