Iva*_*van 4 c# comparison tuples equality c#-7.0
给定2个类型的变量,(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)'
Run Code Online (Sandbox Code Playgroud)
在C#7中这意味着什么?我应该使用.Equals替代方法还是以其他方式使用它?
Dav*_*rno 12
在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 ==
Run Code Online (Sandbox Code Playgroud)
从C#7.3开始,==对值元组添加了直接支持:
(a, b) == (c, d) // compiler converts to a == c && b == d
Run Code Online (Sandbox Code Playgroud)
请注意,==这里不是由元组类型定义的运算符.这是一个"编译器技巧",递归(对于嵌套元组)==对每个元素执行.因此,只有元素支持==自己才能使用此技术.因此,除非限制为支持的类型,否则此方法不适用于泛型==.所以下面的代码将无法编译:
public bool Compare<T1, T2>((T1 a, T2 b) x, (T1 a, T2 b) y) => x == y
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |