gpt4 book ai didi

c# - 为什么 C# 7 ValueTuples 实现了 Equals 方法而不是双等于运算符?

转载 作者:IT王子 更新时间:2023-10-29 04:33:47 25 4
gpt4 key购买 nike

考虑以下代码片段:

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 方法而不实现双重等于运算符?

最佳答案

由于需求冲突,== 运算符未在库中实现。对于所有正确实现 object.Equalsxy(即使他们将其作为引用比较),给定 var tuple1 = (x, y); var tuple2 = (x, y);tuple1.Equals(tuple2)true。但是 tuple1 == tuple2,如果实现的话,应该等同于 x == x && y == y,如果实现的话。后者总是正确的。具体来说,如果 xydouble.NaN,则为假。这就是为什么 a pull request adding an operator == ValueTuple 被拒绝。

在编译器中实现 ==,只有当元组的元素支持通过 == 进行比较时它才会工作,是 an open proposal for the C# language , 但根本还没有实现。没有太多的事件,现在似乎没有理由不实现它,但它的优先级不高。

关于c# - 为什么 C# 7 ValueTuples 实现了 Equals 方法而不是双等于运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42170040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com