比较两个包含相同枚举类型的枚举值的对象

Rir*_*979 7 c#

我定义了一个枚举类型:EnumType现在想象一下

object A = EnumType.Value1;
object B = EnumType.Value2;
Run Code Online (Sandbox Code Playgroud)

我想进行比较(A == B)给出正确的结果,与使用的Enum类型无关.在比较中,对象将始终包含枚举,并且两者将具有相同的类型.

我怎样才能做到这一点?

Bri*_*ndy 5

MSDN上有一篇不错的文章,介绍何时使用==和何时使用Equals。

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

相反,(在您的情况下)并非总是如此。如果2个对象具有值相等,则它们不一定具有引用相等。在你的情况下==是作为引用相等。

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

  • 您通常不希望引用类型为==,它通常会比较两个引用是否引用同一对象。

在您的情况下AB被装在2个不同的对象中。 A指第一个,B指第二个。 ==正在测试,并发现两者都是referring不同的东西。