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] 删除。
我来说两句