为什么以下内容返回false?
在运行时,值对象的类型为SomeEnum
。
我将两个对象都转换为相同类型,但是我仍然收到它作为false。
我在做什么错了?
object value = SomeEnum.FirstValue;
object parameter = 0;
Console.Write(Enum.ToObject(value.GetType(), parameter ?? 0) == Enum.Parse(value.GetType(), value.ToString()));
问题是我无法直接访问SomeEnum
类型,因此我将所有内容作为对象接收。
答案 0 :(得分:3)
因为您正在比较对象实例;不是枚举值。
您需要将两者都转换为枚举,然后进行比较。或使用Object.Equals方法。
因为将它们装在对象中时,它们将成为不同的实例。
尝试以下方法:
Enum.ToObject(value.GetType(), parameter ?? 0).Equals(Enum.Parse(value.GetType(), value.ToString()))
答案 1 :(得分:0)
可以为Enum值分配不同的整数,它们不一定是零索引的。
enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday,
Saturday };
创建新的Day对象时,其默认值为 Day.Sunday(0),如果您未明确为其分配值。
不为枚举器中的元素指定值时 列表中,值会自动增加1。
enum MachineState
{
PowerOff = 0,
Running = 5,
Sleeping = 10,
Hibernating = Sleeping + 5
}
您可以为枚举类型的枚举器列表中的元素分配任何值,还可以使用计算值: