如何从类型变量中获取枚举的默认值

时间:2018-05-30 12:07:12

标签: c# reflection enums default

给定一个对象(在设计时未知),我循环其属性以执行一些过程。在每个属性上,我必须检查它的值是否与默认值不同。

foreach(var p in propertyInfos)
{
    if (something) { ... }
    else if (p.PropertyType.IsEnum)
    {
        object oDefault = GetDefaultValueOfThisPropertyByWhateverMethod();
        if (oDefault == null)
            oDefault = default(p.PropertyType); // not valid
        var vValue = p.GetValue(myObject);

        if (!oDefault.Equals(vValue))
            // Do something enum specific when value is not the default one.
    }
}

我怎么能实现这一点,知道可能存在不包含值为0的项目的枚举?

1 个答案:

答案 0 :(得分:4)

enum的默认值为0 ...即使没有为0定义值。最后,对于任何(EnumType)123,您始终可以enumenum请勿检查/限制他们有效的"值。仅为某些特定值提供一些标签。

请注意,之前我说的0是"键入的"价值...所以它是(EnumType)0,而不是(int)0 ......你可以:

object oDefault = Enum.ToObject(p.PropertyType, 0);

即使使用非基于int的枚举,也可以使用,例如:

enum MyEnum : long
{
}
显然,你甚至可以:

object oDefault = Activator.CreateInstance(p.PropertyType);

因为new SomeEnumType()为0。