C# Equals(Object):确定指定的对象是否等于当前对象

  • Post category:C#

C#中的Equals(Object)方法用于比较两个对象是否相等。在比较过程中,首先会检查传入的参数是否为null,然后再比较对象的内容。该方法的具体实现可以由类重写,从而提供更具体的比较逻辑。

如果未重写Equals(Object)方法,则该方法将使用继承自Object类的默认实现,即使用引用相等性进行比较,即仅当两个对象是同一对象时返回True。

以下是重写Equals(Object)方法的基本模式:

public override bool Equals(Object obj) 
{
    // 检查传入的对象是否为null
    if (obj == null) 
        return false;

    // 如果传入的对象与当前对象引用同一个,则返回True
    if (ReferenceEquals(this, obj)) 
        return true;

    // 比较当前对象的类型与传入对象的类型是否一致
    if (this.GetType() != obj.GetType()) 
        return false;

    // 在此处实现具体的比较逻辑
    // ...

    return base.Equals(obj);
}

在这个方法的实现中,我们检查传入的对象是否为null,如果是,则返回False。然后再比较两个对象的引用,如果是同一对象,则返回True。接下来,比较当前对象与传入对象的类型是否一致,如果不一致,则返回False。最后,我们实现了比较逻辑。

以下是两个示例,说明如何使用Equals(Object)方法:

示例1:比较两个字符串是否相等

string s1 = "Hello";
string s2 = "Hello";

if (s1.Equals(s2))
{
    Console.WriteLine("s1 和 s2 相等");
}
else
{
    Console.WriteLine("s1 和 s2 不相等");
}

在这个示例中,我们创建了两个字符串,它们包含相同的字符。我们然后调用s1Equals()方法,将s2传入作为比较对象。如果它们相等,则打印“s1 和 s2 相等”。

示例2:比较自定义类的对象是否相等

public class Person
{
    public string name { get; set; }
    public int age { get; set; }
    public string address { get; set; }

    public override bool Equals(object obj)
    {
        if (obj == null)
            return false;

        if (ReferenceEquals(this, obj))
            return true;

        if (this.GetType() != obj.GetType())
            return false;

        Person p = (Person)obj;
        return (name == p.name && age == p.age && address == p.address);
    }
}

Person p1 = new Person { name = "Tom", age = 20, address = "Beijing" };
Person p2 = new Person { name = "Tom", age = 20, address = "Beijing" };

if (p1.Equals(p2))
{
    Console.WriteLine("p1 和 p2 相等");
}
else
{
    Console.WriteLine("p1 和 p2 不相等");
}

在这个示例中,我们定义了一个自定义类Person,它包含nameageaddress属性。我们实现了Equals(Object)方法,比较对象的三个属性是否都相等。然后,我们创建了两个Person类的对象,并调用Equals(Object)方法来比较它们是否相等。如果它们相等,则打印“p1 和 p2 相等”。

总之,Equals(Object)方法是在C#中用于比较两个对象是否相等的方法。通过重写此方法,您可以提供自己的比较逻辑。