== 和等于元组<object>

问题描述 投票:0回答:1

我有一个问题为什么它会这样工作

var a = new Tuple<object, object, object>(1, 1, 1);
var b = new Tuple<object, object, object>(1, 1, 1);

Console.WriteLine(a.Item1==b.Item1);//Output- False
Console.WriteLine(a.Equals(b));//Output- True
Console.WriteLine(a==b);//Output- False

为什么会这样?

我尝试找到一些有关其工作原理的信息,据我所知,这是由于对象类型和值类型(int)而发生的

c# object tuples equals
1个回答
0
投票

这就是 C# 中 valuereference 类型之间的区别。

Console.WriteLine(a.Item1==b.Item1);//输出- False

这里您正在比较两个

object
实例。对于任何引用类型,相等运算符(除非在该类型中被重写)进行引用比较。

当您将任何值类型(例如,在您的情况下为

int
)存储在引用类型的变量(在您的情况下为
object
)时,您正在执行名为 boxing 的操作。

Console.WriteLine(a.Equals(b));

这是因为

Equals
方法在
int
类型中被重写。

Console.WriteLine(a==b);

同样,您有

Tuple
类的两个实例(任何类都是引用类型),并且该
Tuple
类没有
==
运算符的覆盖。因此,您只需检查这两个变量是否包含相同的实例。您仍然可以使用
a.Equals(b)
来检查这两个元组的 contents 是否相同,它会为每个元组调用
Equals
并在您的情况下返回
true

© www.soinside.com 2019 - 2024. All rights reserved.