关于c#:long和int相等,Equals()会发生什么


long and int equality, what goes on with Equals()

本问题已经有最佳答案,请猛点这里访问。

我今天遇到这个,我相信有一个很好的理由,但为什么num2等于num1的情况是否不一致?

1
2
3
4
5
6
long num1 = 1;
int num2 = 1;

num1.Equals(num2);  // TRUE - cool.
num2.Equals(num1); // FALSE - hmm?
num2 == num1; // TRUE - ?! Whit?

为什么会这样呢?


1
num1.Equals(num2);

解决了long.Equals(long)的过载问题,因为存在从intlong的隐式扩大转换。

1
num2.Equals(num1);

调用int.Equals(object),使long号装箱。因为这不是一个int,所以比较返回false。

1
num2 == num1;

long调用重载的==运算符,这再次导致num2在进行比较之前被提升为long


1
2
3
4
5
6
long num1 = 1;
int num2 = 1;

MessageBox.Show(num1.Equals(num2).ToString());
MessageBox.Show(num2.Equals((int)num1).ToString());
MessageBox.Show((num2 == num1).ToString());

这是一个显式地将long-a s转换为int以使它们如预期一样相等的问题。其他人正在为你做演员。