如何比较将它们都转换为Enum的对象和整数值?

时间:2019-03-25 04:12:06

标签: c#

为什么以下内容返回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类型,因此我将所有内容作为对象接收。

2 个答案:

答案 0 :(得分:3)

因为您正在比较对象实例;不是枚举值。

您需要将两者都转换为枚举,然后进行比较。或使用Object.Equals方法。

因为将它们装在对象中时,它们将成为不同的实例。

尝试以下方法:

 Enum.ToObject(value.GetType(), parameter ?? 0).Equals(Enum.Parse(value.GetType(), value.ToString()))

答案 1 :(得分:0)

可以为Enum值分配不同的整数,它们不一定是零索引的。

Enumeration types C#

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
}
  

您可以为枚举类型的枚举器列表中的元素分配任何值,还可以使用计算值: