我想使用类似的东西:
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()f.e获取它的所有值。 对于任何给定枚举都很容易,但我希望这对于每个可能的枚举都是通用的, 例如,如果ob有:
enum Weather {
sunny,
rainy,
cloudy
}
Weather weather = sunny;
enum Places {
beach,
mall,
home
}
Places place = beach;
我可以自己获取两个变量和两个枚举的所有值。 当然我不能直接检查typeof(Enum)或其他什么。 有人有线索吗?
答案 0 :(得分:1)
else if(prop.PropertyType.IsEnum)
{
var values = Enum.GetValues(prop.PropertyType);
}
答案 1 :(得分:0)
就像
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)
静态方法的参数。