📅  最后修改于: 2023-12-03 14:59:39.701000             🧑  作者: Mango
在C#中,有两种比较操作符:.Equals
和==
。在某些情况下,它们可能会产生相同的结果,但在其他情况下,它们是不同的。本文将探讨它们的区别与使用场景。
.Equals
方法.Equals
是.NET
中的一个方法,通过它可以比较两个对象是否相等。对于字符串和基本数据类型,.Equals
方法会比较他们的值,而对于引用类型,.Equals
方法比较的是对象的内存地址。
以下是一个字符串比较的实例代码:
string str1 = "Hello";
string str2 = "Hello";
bool equalStrings = str1.Equals(str2); // 返回true
以下是一个引用类型比较的实例代码:
class Person
{
public string Name { get; set; }
}
Person person1 = new Person { Name = "Bob" };
Person person2 = new Person { Name = "Bob" };
bool equalPersons = person1.Equals(person2); // 返回false
可以看到,在Person
类的.Equals
方法中,没有重写该方法,因此默认比较的是对象的地址,所以person1
和person2
被视为不相等。
==
操作符==
操作符是一种比较两个对象的快捷方式,它经常用于比较字符串和基本数据类型。在这些情况下,==
操作符与.Equals
方法产生相同的结果。
以下是一个字符串比较的实例代码:
string str1 = "Hello";
string str2 = "Hello";
bool equalStrings = str1 == str2; // 返回true
以下是一个基本数据类型比较的实例代码:
int x = 1;
int y = 1;
bool equalIntegers = x == y; // 返回true
但是,对于引用类型,==
操作符比较的是对象的地址,而不是内容。因此,如果想要比较引用类型的内容,必须重写类的==
操作符或.Equals
方法。
以下是一个重写类的==
操作符的实例代码:
class Person
{
public string Name { get; set; }
public static bool operator ==(Person person1, Person person2)
{
if (ReferenceEquals(person1, person2))
{
return true;
}
if (person1 is null || person2 is null)
{
return false;
}
return person1.Name == person2.Name;
}
public static bool operator !=(Person person1, Person person2)
{
return !(person1 == person2);
}
}
Person person1 = new Person { Name = "Bob" };
Person person2 = new Person { Name = "Bob" };
bool equalPersons = person1 == person2; // 返回true
可以看到,在Person
类中,重写了==
操作符,比较的是对象的内容。因此,person1
和person2
被视为相等。
以下是建议的使用场景:
.Equals
方法或重写类的==
操作符。.Equals
方法或==
操作符。对于值类型的比较,推荐使用==
操作符。对于引用类型和值类型,.Equals
方法和==
操作符的比较方式不同。.Equals
方法比较的是对象的内容或值,而==
操作符比较的是对象的地址或值。在使用时需要根据具体情况进行选择。