什么时候两个枚举在C#中相同?

Pet*_*ter 7 c# enums equality

我创建了两个枚举,我知道它们不一样,但我认为它们是相同的,因为它们的字符串表示以及它们的数字表示相等(甚至相同......).

换句话说:我希望第一个测试通过,第二个测试失败.但实际上,它们都失败了.那么:C#中的两个枚举何时相等?或者无论如何在C#中定义equals运算符?

谢谢!

    public enum enumA {one, two}

    public enum enumB {one, two}

    [Test]
    public void PreTest()
    {           
    Assert.AreEqual(enumA.one,enumB.one);
    Assert.AreSame(enumA.one, enumB.one);
    }
Run Code Online (Sandbox Code Playgroud)

更新:1)所以到目前为止所有答案都比较表示,无论是整数还是字符串.enum 本身总是不平等的我聚集在一起?没有办法为它定义平等吗?

use*_*116 14

因此,枚举在C#中是强类型的enumA.one != enumB.one.现在,如果你将每个枚举转换为它们的整数值,它们将是相等的.

Assert.AreEqual((int)enumA.one, (int)enumB.one);
Run Code Online (Sandbox Code Playgroud)

另外,我想挑战一下这句话,因为它们具有相同的整数或字符串表示,它们应该相同或相等.给定两个枚举NetworkInterfaceVehicleType,它不会是合乎逻辑的C#或.Net框架,以允许NetworkInterface.None为等于VehicleType.None当作为枚举相比,通过任何一个值或字符串.但是,如果开发人员将强类型枚举强制转换为整数或字符串,则语言或框架无法阻止二者进行等式.

为了进一步说明,您不能覆盖MyEnum.Equals以提供不同的相等方法..Net枚举并不是Java的后续版本中的第一类公民,我希望C#允许与Enums进行更丰富的交互.