4

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

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

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

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

或者

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

有人可以帮我理解这两种方法之间的区别以及为什么两种方法都存在吗?

我都试过了,都产生了相同的结果。

4

3 回答 3

6

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

于 2012-06-02T07:53:16.417 回答
1

在结构的情况下,就像这里使用的整数一样,不会有区别。对于课程可能有。

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

 var foo1 = new Foo{PrimaryKey = 5};
 var foo2 = new Foo{PrimaryKey = 5};
 foo1 == foo2 //false
 foo1.Equals(foo2) //true
于 2012-06-02T07:55:33.297 回答
0

有人可以帮我理解这两种方法之间的区别吗

功能上没有区别,但是第二种更容易阅读和理解,所以首选。

为什么两者都存在?

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

于 2012-06-02T07:52:18.207 回答