gpt4 book ai didi

c# - C# 中的两个枚举何时相等?

转载 作者:太空狗 更新时间:2023-10-29 19:53:26 26 4
gpt4 key购买 nike

我创建了两个枚举,我知道它们相同,但我仍然认为它们相等是有道理的,因为它们的字符串表示和数字代表是平等的(甚至是相同的......)。

换句话说:我希望第一个测试通过,第二个测试失败。然而实际上,他们都失败了。那么:C# 中的两个枚举何时相等?或者有没有在 C# 中定义等于运算符?

谢谢!

    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);
}

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

最佳答案

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

Assert.AreEqual((int)enumA.one, (int)enumB.one);

此外,我想质疑这样一种说法,即因为它们具有相同的整数或字符串表示形式,所以它们应该相同或相等。给定两个枚举 NetworkInterfaceVehicleType,C# 或 .Net Framework 允许 NetworkInterface.None 等于 是不合逻辑的VehicleType.None 当作为枚举进行比较时,按值或字符串。但是,如果开发人员将强类型枚举转换为整数或字符串,则语言或框架无法阻止两者相等。

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

关于c# - C# 中的两个枚举何时相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com