Sie*_*ike 4 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.
}
}
Run Code Online (Sandbox Code Playgroud)
知道可能存在不包含值为 0 的项目的枚举,我怎么能做到这一点?
an 的默认值enum是 0... 即使没有为 0 定义值。最后你总是可以(EnumType)123为 any enum。enum不要检查/限制它们的“有效”值。只为某些特定值提供一些标签。
请注意,我之前所说的 0 是一个“类型化”值......所以它是(EnumType)0,而不是(int)0......你可以:
object oDefault = Enum.ToObject(p.PropertyType, 0);
Run Code Online (Sandbox Code Playgroud)
甚至适用于非int基于枚举的枚举,例如:
enum MyEnum : long
{
}
Run Code Online (Sandbox Code Playgroud)
显然你甚至可以:
object oDefault = Activator.CreateInstance(p.PropertyType);
Run Code Online (Sandbox Code Playgroud)
因为new SomeEnumType()是 0。