使用Equals比较Enum和const int时未出现编译错误

帕塞格

C#:代码部分:

class ConstValues
{
   public const int NULL=1;
}

class Example
{
   private enum FormatFunction
   {
      Date,
      Unknown
   }

   ...

   FormatFunction returnValue = fn();

   ...

现在我有两种情况。

当我使用这种方式将我的返回码与一个值进行比较时

if (!returnValue.Equals(ConstValues.NULL))
{
   ...

我没有编译时错误(并且代码无法按预期运行,因为这是我错过的我的错误)。

但是当我改变为

if (returnValue != ConstValues.NULL)
{
   ...

我收到一个编译时错误,并发现了我做的错误。

我知道枚举的基本结构是int,但是即使使用Equals,我还是会遇到编译时错误。

为什么第一种方法通过而第二种方法没有通过?

编码义

!=是一种语言约定,因此这是C#特定的。调用此运算符是早绑定的,换句话说,它将在编译时发生。

Equals 是一个框架约定,在这种情况下是.NET,并且在运行时绑定。

当您调用时!=,C#编译器会在编译过程中做出决定,因此会出现错误。当您调用时Equals,决定是由框架在运行时做出的。由于您的枚举不是对象类型,它将被转换为对象(装箱),然后运行时将检查您的类型是否覆盖了该Equals方法,因为没有,则它将使用默认实现。


Equals 参考类型

如果实例是引用类型,则默认实现Equals检查一个对象引用是否与另一对象引用相同。如果它们是相同的引用,则返回true。否则,它返回false。


Equals 对于值类型

如果实例是值类型,则它将测试值是否相等。这是你的情况。它将检查您拥有的枚举值是否等于常数。不会显示或抛出任何错误:相等或不相等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用JsonObjectRequest时出现编译错误

使用LuaPlus时出现编译错误

使用 for 和 yield 时出现编译错误

使用Streams和Maven时出现编译错误

使用 Lombok 和 IntelliJ 时出现奇怪的编译错误

使用GCC时出现几个编译错误

使用 RxJava 运行代码时出现编译错误

在 Windows 环境中使用 clang 时出现编译错误

使用Maven引用库时出现编译错误

尝试使用vector <ostringstream>时出现编译错误

不使用模板[opencv]时出现编译错误

快速使用XCTest时不会出现编译错误

使用Maven创建WAR时出现编译错误

使用d3.js和TypeScript绘制饼图时出现编译错误

类型比较时编译错误

当参数为int时为什么会出现编译错误“无法在...的参数中使用...作为uint8类型”

尝试打印最大框的体积以及长度,宽度和高度时出现编译错误

使用Array.Equals()时抛出编译错误

在带有Angular的函数参数中使用联合类型时出现编译错误

Spring JPA 数据:Eclipse 中的 Querydsl 在使用查询 dsl 类时出现编译错误

解决方案使用 PackageReference,但在引用 packages.config 时出现编译错误

尝试使用ViewModel在片段之间进行通信时出现编译错误

在 HttpServletRequest 的 headerNames 枚举上使用 Collectors.toMap 创建 HttpHeaders 时出现编译错误

尝试使用用户输入创建矩阵时出现编译错误。爪哇

在我的 web.config 文件中使用 kendo.mvc.ui 时出现编译错误

在while循环中使用最终局部变量时出现不同的编译错误

Boost状态图-使用状态图作为模板参数时出现编译错误

尝试使用operator(->)访问结构成员时出现编译错误

使用Java查找最多三个整数时出现的持久性编译错误