[英]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.