给定两个(int, int)
类型的变量,如何检查它们是否代表相等的值?
例如:
var a = (1, 2);
var b = (1, 2);
var c = a == b; // Error CS0019 Operator '==' cannot be applied to operands
// of type '(int, int)' and '(int, int)'
这种比较是如何在C#7中完成的?我应该使用.Equals
代替还是以其他方式使用它?
答案 0 :(得分:11)
在C#7.3之前,您有两个选择:使用.Equals
,或者您可以为自己支持==
的元素长时间写出==
比较:
(a, b).Equals((c, d)) // true if a.Equals(c) && b.Equals(d)
a == c && b == d // works if the types support ==
(For details of how Equals()
works, check out the source。)
从C#7.3开始,对值元组添加了对==
的直接支持:
(a, b) == (c, d) // compiler converts to a == c && b == d
请注意,==
这里不是由元组类型定义的运算符。它是一个"编译技巧"递归(对于嵌套元组)在每个元素上执行==
。因此,只有元素本身支持==
时才能使用此技术。因此,除非限制为支持==
的类型,否则此方法不适用于泛型。所以下面的代码不会编译:
public bool Compare<T1, T2>((T1 a, T2 b) x, (T1 a, T2 b) y) => x == y