.Equals(N)和== N之间的差异

时间:2012-06-02 07:49:54

标签: c# .net

  

可能重复:
  == or .Equals()

我有一个字符串数组,只想计算数组中分割字符串项的数量。

但我无法决定我想要/需要/应该使用哪个版本:

if(myStringArray.Count.Equals(47))
{
   // Do something.
}

if(myStringArray.Count == 47)
{
   // Do something.
}

有人可以帮我理解两种方法之间的区别以及两种方法存在的原因吗?

我已经尝试了两者,两者都产生了相同的结果。

3 个答案:

答案 0 :(得分:6)

Equals方法为对象类型提供了一种在两个实例之间定义“相等”的方法。对于数字,Equals==是相同的,但当您使用对象类型时它们是不同的:Equals比较相等(两者是彼此等价的对象),==比较身份(是对相同对象的两个引用)。类作者将覆盖Equals并且(通常)将对象的所有字段与其他对象的字段进行比较,或者比较 key 字段,具体取决于类。

答案 1 :(得分:1)

对于结构体,就像这里使用的整数一样,没有区别。对于课程可能会有。

对于int,bool,datetime等结构,内在值与==而不是引用进行比较。 对于类==比较引用,但可以重写equals以应用自定义comparisson。 例如,如果类Foo是一个包含主键的类,并且已覆盖它的基数等于实现以比较键:

 var foo1 = new Foo{PrimaryKey = 5};
 var foo2 = new Foo{PrimaryKey = 5};
 foo1 == foo2 //false
 foo1.Equals(foo2) //true

答案 2 :(得分:0)

  

请有人帮我理解两种方法之间的区别

功能没有区别,但第二个更容易阅读和理解,所以它更受欢迎。

  

为什么两者都存在?

在C#中,System.Int32是一个结构,因此它具有从Equals(Object)继承的System.Object方法。 .NET开发人员还添加了Equals(Int32)方法,该方法提供了具有相同语法的替代方法。我从未在生产代码中看到Equals(Int32),因为==更容易阅读。