【问题标题】:How to get default value of an enum from a type variable如何从类型变量中获取枚举的默认值
【发布时间】:2018-05-30 12:07:11
【问题描述】:

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

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 的项目的枚举,我怎么能做到这一点?

【问题讨论】:

  • 任何enum的默认值都是零,enum是否包含具有该值的项目并不重要。
  • @DavidG 但请注意,它是“键入”的零......
  • @pijemcolu 但这是无效代码

标签: c# reflection enums default


【解决方案1】:

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。

【讨论】:

  • 感谢 xanatos,这就像一个魅力!我在Enum.ToObject 中使用了您的第一个提示,现在我的代码按预期工作。
猜你喜欢
  • 2011-10-14
  • 1970-01-01
  • 2020-12-26
  • 2017-01-14
  • 2021-02-23
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
相关资源
最近更新 更多