我已经定义了一个枚举类型的枚举值两个对象:EnumType 现在想象比较包含相同枚举类型
object A = EnumType.Value1;
object B = EnumType.Value2;
我想作比较(A == B)给我正确的结果独立于使用的Enum的类型。在比较中,对象总是包含枚举,并且两者都是相同的类型。
我怎样才能做到这一点?
我已经定义了一个枚举类型的枚举值两个对象:EnumType 现在想象比较包含相同枚举类型
object A = EnumType.Value1;
object B = EnumType.Value2;
我想作比较(A == B)给我正确的结果独立于使用的Enum的类型。在比较中,对象总是包含枚举,并且两者都是相同的类型。
我怎样才能做到这一点?
There is a good article on MSDN on when to use == and when to use Equals.
基本上有两种类型的平等:参考平等和值相等。如果2个对象具有引用相等性,则它们因此也具有值相等性(两个引用指向相同的对象,因此它们的值当然是相同的)。
相反,(在你的情况)并不总是如此。如果2个对象具有值相等性,则它们不一定具有参考相等性。在你的情况==
作为参考平等。
通常你想要的是Equals
,它是一个在System.Object中定义的虚拟方法。
你通常不想要的参考类型是==
,它通常会比较两个参考是否引用同一个对象。
在你的情况A
和B
被装箱到2个不同的对象。 A
指的是第一个而B
指的是第二个。 ==
正在测试,看到两者都是referring
以不同的东西。
只要使用A.Equals(B)
,它会调用内部类型Equals。
在你的情况下,你不能使用==
因为A和B被装箱在2个不同的对象。
将枚举比较抛出异常吗?如果是的话,那么它的解决方案是什么? – 2016-02-11 15:43:16