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

7

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

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

我希望能够使比较 ( A == B ) 的结果与使用的枚举类型无关。在比较中,对象将始终包含枚举,并且两者将是同一类型。
我该如何实现这个功能?
2个回答

6

MSDN上有一篇关于何时使用==和Equals的好文章。

基本上有两种相等性:引用相等性和值相等性。如果两个对象具有引用相等性,则它们也具有值相等性(两个引用指向同一个对象,因此它们的值相同)。

相反的情况(在您的情况下)不总是成立。如果两个对象具有值相等性,则它们不一定具有引用相等性。在您的情况下,==作为引用相等性。

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

  • 对于引用类型,您通常不想使用==,它通常比较两个引用是否指向同一个对象。

在您的情况下,AB被装箱为两个不同的对象。A指向第一个对象,而B指向第二个对象。==测试并发现它们都引用不同的东西。


枚举比较会抛出异常吗?如果是,那么解决方案是什么? - Khan Engineer

3

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接