Jon*_*ner 21 .net c# tuples c#-7.0
请考虑以下代码段:
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
Run Code Online (Sandbox Code Playgroud)
前两个断言通过.第三个不编译.
为什么ValueTuple实现了自定义的Equals方法但没有实现double equals运算符?
小智 37
==
由于需求冲突,运算符未在库中实现.对于所有x
和y
正确实现object.Equals
(即使他们将其作为参考比较),给定var tuple1 = (x, y); var tuple2 = (x, y);
,tuple1.Equals(tuple2)
是true
.但是tuple1 == tuple2
,如果实施,应该相当于x == x && y == y
,如果实施的话.后者并非总是如此.具体地讲,它是假的,如果x
和y
是double.NaN
.这就是为什么添加operator ==
to 的pull请求ValueTuple
被拒绝的原因.
==
在编译器中实现,只有在元组的元素支持比较时才能工作==
,这是编译器的开放提议,但还没有实现.没有太多的活动,现在似乎没有理由为什么它不会被实施,但它根本没有高优先级.
归档时间: |
|
查看次数: |
2478 次 |
最近记录: |