我有一个枚举类型定义:EnumType,现在想象一下:
object A = EnumType.Value1;
object B = EnumType.Value2;
我希望能够使比较 ( A == B ) 的结果与使用的枚举类型无关。在比较中,对象将始终包含枚举,并且两者将是同一类型。
我该如何实现这个功能?
我有一个枚举类型定义:EnumType,现在想象一下:
object A = EnumType.Value1;
object B = EnumType.Value2;
基本上有两种相等性:引用相等性和值相等性。如果两个对象具有引用相等性,则它们也具有值相等性(两个引用指向同一个对象,因此它们的值相同)。
相反的情况(在您的情况下)不总是成立。如果两个对象具有值相等性,则它们不一定具有引用相等性。在您的情况下,==
作为引用相等性。
通常您需要使用Equals
,它是System.Object中定义的虚拟方法。
对于引用类型,您通常不想使用==
,它通常比较两个引用是否指向同一个对象。
在您的情况下,A
和B
被装箱为两个不同的对象。A
指向第一个对象,而B
指向第二个对象。==
测试并发现它们都引用
不同的东西。
只需使用A.Equals(B)
,它将调用内部类型Equals。
在您的情况下,您不能使用==
,因为A和B被装箱在两个不同的对象中。