我创建了两个枚举,我知道它们不一样,但我认为它们是相同的,因为它们的字符串表示以及它们的数字表示相等(甚至相同......).
换句话说:我希望第一个测试通过,第二个测试失败.但实际上,它们都失败了.那么: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)
另外,我想挑战一下这句话,因为它们具有相同的整数或字符串表示,它们应该相同或相等.给定两个枚举NetworkInterface和VehicleType,它不会是合乎逻辑的C#或.Net框架,以允许NetworkInterface.None为等于VehicleType.None当作为枚举相比,通过任何一个值或字符串.但是,如果开发人员将强类型枚举强制转换为整数或字符串,则语言或框架无法阻止二者进行等式.
为了进一步说明,您不能覆盖MyEnum.Equals以提供不同的相等方法..Net枚举并不是Java的后续版本中的第一类公民,我希望C#允许与Enums进行更丰富的交互.
| 归档时间: |
|
| 查看次数: |
7749 次 |
| 最近记录: |