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 次 |
| 最近记录: |