可能重复:
== or .Equals()
我有一个字符串数组,只想计算数组中分割字符串项的数量。
但我无法决定我想要/需要/应该使用哪个版本:
if(myStringArray.Count.Equals(47))
{
// Do something.
}
或
if(myStringArray.Count == 47)
{
// Do something.
}
有人可以帮我理解两种方法之间的区别以及两种方法存在的原因吗?
我已经尝试了两者,两者都产生了相同的结果。
答案 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)
,因为==
更容易阅读。