C# 反射和如何处理枚举
我想使用类似的方法:C# 反射和如何处理枚举,c#,reflection,enums,C#,Reflection,Enums,我想使用类似的方法: object ob; var props = ob.GetType().GetProperties(); List<Element> list = new List<Element>(); foreach (var prop in props) { if (prop.PropertyType == typeof(Strin
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
{
}
}
我将能够获得两个变量本身以及两个枚举的所有值。
当然,我不能直接检查typeof(Enum)或任何东西。
有人有线索吗?有点像
typeof(Weather).GetFields()
或
如果要直接在enum
类型上使用反射。enum
的成员是一种静态
字段
但你也可以使用
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)
static方法的参数
else if(prop.PropertyType.IsEnum)
{
var values = Enum.GetValues(prop.PropertyType);
}
var typeOfOb = ob.GetType();
if (typeOfOb.IsEnum)
{
// use Enum.GetValues(typeOfOb) here
}
else if(prop.PropertyType.IsEnum)
{
var values = Enum.GetValues(prop.PropertyType);
}