2010-05-28 134 views
6

我已经定义了一个枚举类型的枚举值两个对象:EnumType 现在想象比较包含相同枚举类型

object A = EnumType.Value1; 
object B = EnumType.Value2; 

我想作比较(A == B)给我正确的结果独立于使用的Enum的类型。在比较中,对象总是包含枚举,并且两者都是相同的类型。

我怎样才能做到这一点?

回答

4

There is a good article on MSDN on when to use == and when to use Equals.

基本上有两种类型的平等:参考平等和值相等。如果2个对象具有引用相等性,则它们因此也具有值相等性(两个引用指向相同的对象,因此它们的值当然是相同的)。

相反,(在你的情况)并不总是如此。如果2个对象具有值相等性,则它们不一定具有参考相等性。在你的情况==作为参考平等。

  • 通常你想要的是Equals,它是一个在System.Object中定义的虚拟方法。

  • 你通常不想要的参考类型是==,它通常会比较两个参考是否引用同一个对象。

在你的情况AB被装箱到2个不同的对象。 A指的是第一个而B指的是第二个。 ==正在测试,看到两者都是referring以不同的东西。

+0

将枚举比较抛出异常吗?如果是的话,那么它的解决方案是什么? – 2016-02-11 15:43:16

3

只要使用A.Equals(B),它会调用内部类型Equals。

在你的情况下,你不能使用==因为A和B被装箱在2个不同的对象。