C#value-type元组项不匹配?

时间:2017-03-12 03:23:35

标签: c#

Item1 == Item2Tuple<object,object>都是布尔值Item1时,有人可以解释为什么Item2的{​​{1}}评估为假?

enter image description here

2 个答案:

答案 0 :(得分:1)

问题是==的工作方式,因为它不会遍历层次结构树,只是使用值的类型(因为它不是虚拟可覆盖的方法,而是运算符),这是盒装所以对象,通过引用检查功能,所以如果它们不是完全相同的对象(非值),它将返回false。

正如你自己在答案中所说的那样,他们装箱了一个物体。因此,为了解决这个问题,您可以使用Equals修复您的问题,因为C#会转到值的最顶层子项(在您的情况下,它将是Boolean.Equals而不是来自Object的operator ==

var allEqual = together.All(tuple => tuple.Item1.Equals(tuple.Item2));

答案 1 :(得分:-1)

我很确定这是因为Boxingfalse项目均为Tuple,因此object运算符正在执行参考比较。由于==被设置为与Item1不同的object,因此Item2引用比较将返回false。