问题标签 [equals-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 可以为接口引用定义 == 的行为吗?
如果接口继承了 IEquatable,则实现类可以定义 Equals 方法的行为。是否可以定义 == 操作的行为?
通过比较它们的值来检查两个 IFoo 引用是否相等:
是否可以if (X == Y)
在 Foo 上使用 Equals 方法?
c# - 运算符 == 不能应用于 C# 中的泛型类型吗?
根据MSDN==
中运营商的文档,
对于预定义的值类型,相等运算符 (==) 如果其操作数的值相等则返回 true,否则返回 false。对于字符串以外的引用类型,== 如果它的两个操作数引用同一个对象,则返回 true。对于字符串类型,== 比较字符串的值。用户定义的值类型可以重载 == 运算符(请参阅运算符)。用户定义的引用类型也可以,尽管 默认情况下 == 对于预定义的和用户定义的引用类型的行为如上所述。
那么为什么这个代码片段无法编译呢?
我收到错误Operator '==' cannot be applied to operands of type 'T' and 'T'。我想知道为什么,因为据我所知,==
运算符是为所有类型预定义的?
编辑:谢谢大家。起初我没有注意到该声明仅涉及引用类型。我还认为为所有值类型提供了逐位比较,我现在知道这是不正确的。
但是,如果我使用引用类型,==
运算符会使用预定义的引用比较,还是如果类型定义了运算符,它会使用运算符的重载版本?
编辑 2:通过反复试验,我们了解到==
运算符在使用不受限制的泛型类型时将使用预定义的引用比较。实际上,编译器将使用它可以找到的最佳方法来处理受限类型参数,但不会再看下去了。例如,下面的代码将始终打印true
,即使Test.test<B>(new B(), new B())
被调用:
c# - 重载operator==后,如何比较两个变量是否指向同一个对象?
重载比较运算符,如果两个变量指向同一个对象(即不是值)如何比较
c# - 有什么方法可以让实现 IEntity 和向下转换的类进行运算符 == 比较?
基本上这就是问题所在。我系统中的所有实体都由它们的类型和它们的id
.
很标准的场景。由于所有实体都有一个 Id,我为所有实体定义了一个接口。
为了简化我制作的实体的创建:
客户和产品类似于
我认为这是笨拙的多莉。我认为我所要做的就是在每个实体中覆盖 Equals (如果我非常聪明,我什至可以在 中只覆盖它一次BaseEntity
)以及所有工作。
所以现在我正在扩大我的测试范围,发现它并不那么简单!首先,当向下转换IEntity
并使用覆盖时==
,BaseEntity<>
不使用。
那么解决方案是什么?还有什么我可以做的吗?如果没有,这很烦人。
更新 1我的测试似乎有问题 - 或者更确切地说是比较泛型。看一下这个:
这里发生了什么?这不是我担心的那么大的问题,但仍然很烦人,并且语言的行为方式完全不直观。
更新 2啊,我明白了,IEntity
出于某种原因,泛型隐式向下转换。我认为这对我的域的消费者来说是不直观且可能存在问题的,因为他们需要记住,泛型方法或类中发生的任何事情都需要与Equals()
c++ - 运算符 == 的 C++ 模板类错误
错误:
错误 C2678:二进制“==”:未找到采用“const entry”类型的左侧操作数的运算符(或没有可接受的转换)
功能:
这假设是一个重载的运算符吗?作为一个模板类,我不确定我是否理解错误?
解决方案- 类中的重载函数现在声明为 const:
c# - C# == 操作符具体做了什么?
在 c# 中,当您在两个对象上与“==”运算符进行比较时,在后台究竟会发生什么?它只是比较地址吗?还是类似于 Equals() 或 CompareTo() ?
PS:java中的“==”操作符呢?它的行为是否相同?
c# - C# 隐式转换和 == 运算符
一些上下文代码:
是否可以在不同类型的实例上使用 == 运算符,其中一个可以隐式转换为另一个?我错过了什么?
编辑:
如果类型必须是相同的调用 ==,那么为什么
作品?
.net - 重写 Equals 方法时是否需要重写 == 和 != 运算符?(。网)
还是建议这样做?为什么?
c# - 如何处理相等比较中的空值?
当我必须为
我应该做
和
和
错误的?
还有呢
它也应该是假的吗?
更新人们质疑这个问题背后的原因。假设 != 和 == 总是相反的。但是,如果我实现这些方法以使上述所有比较结果为假,那么在某些情况下 == 和 != 运算符将产生相同的结果。所以 != 应该返回 true 还是 false 是一个两难的问题。