Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反射和如何处理枚举_C#_Reflection_Enums - Fatal编程技术网

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);
}