2

我正在重构由未指定编码器编写的客户代码。它看起来像这样。

int i = ...;
if (i.Equals(123));

我很想将其更改为通常的,即

int i = ...;
if (i == 123);

但我很谨慎,不要造成任何损害。这些电话是等价的,不是吗?无论如何,操作符风格不能慢,但肯定更令人惊讶且可读性更差,对吧?

4

3 回答 3

3

对于值类型使用==运算符,因为Equals通常对引用类型很有用。由于 int 是一种值类型,因此最好使用==运算符。该规则有一个例外,那就是字符串,因为字符串是一种引用类型,但==运算符在 .Net 框架中被重载以检查是否相等。

这些电话是等效的,不是吗?

它们是等价的。

于 2013-03-06T11:48:46.950 回答
1

什么时候应该使用 ==,什么时候应该使用 Equals?

我也不知道的东西:)

默认情况下,值类型不为 == 提供重载。但是,框架提供的大多数值类型都提供了自己的重载。值类型的 Equals 的默认实现由 ValueType 提供,并使用反射进行比较,这使得它比通常的特定于类型的实现慢得多。此实现还对正在比较的两个值内的引用对调用 Equals。

此外,我使用==字符串来避免空值检查。

if(myString == "something")

对比

if(myString != null && myString.Equals("something"))
于 2013-03-06T12:02:15.107 回答
0

由于您将变量声明为int,因此它是一种值类型,建议使用运算符样式。方法样式将应用于对象类型变量。

您可以比较值类型对象类型

于 2013-03-06T11:52:20.690 回答