【发布时间】:2017-06-29 10:20:12
【问题描述】:
考虑以下代码sn-p:
var tuple1 = (7, "foo");
var tuple2 = (7, "foo");
var tuple3 = (42, "bar");
Assert.That(tuple1.Equals(tuple2), Is.True); //This passes
Assert.That(tuple1.Equals(tuple3), Is.False); //This passes
Assert.That(tuple1 == tuple2, Is.True); //This does not compile
前两个断言通过。第三个不编译。
为什么 ValueTuple 实现了自定义的 Equals 方法,却没有实现双等号运算符?
【问题讨论】:
-
我投票决定将此问题作为题外话结束,因为询问 Stack Overflow 为什么语言/工具/框架支持或不支持某项功能是题外话。
-
@ErikPhilips:虽然我很欣赏大家的呼喊,但这是罕见的“为什么不呢?”之一。真正有意义的问题。有人不厌其烦地实现 Equals,然后实现 == 来简单地调用 Equals 的成本是微不足道的。 C# / .NET 执行相等的方式有点奇怪且容易出错。在设计更好的系统中,实现
==、Equals、IComparable<T>等不会有任何区别,但不幸的是有。 -
@EricLippert 欢迎您。我已经用过很多次了。许多开发人员不了解构建一个有数百万甚至数十亿人使用的框架的真正成本以及与正确处理相关的成本。 ;)
-
在我写这篇评论时,它确实(现在)工作:sharplab.io/…