📜  c# 比较对象 - C# (1)

📅  最后修改于: 2023-12-03 14:39:47.259000             🧑  作者: Mango

C#比较对象

在C#中,我们有许多方式来比较对象。在此,我们将介绍C#中比较对象的三种最常见方法:默认比较,自定义比较和比较器比较。

默认比较

在C#中,每个对象都有一个默认的比较规则。默认情况下,比较的是对象的引用,而不是对象本身。这意味着,如果有两个相同的对象,但存储在不同的内存地址上,则它们将不相等。

下面是一个默认比较的示例:

class Program
{
    static void Main(string[] args)
    {
        string str1 = "Hello";
        string str2 = string.Copy(str1);

        if (str1 == str2)
        {
            Console.WriteLine("Strings are equal");
        }
        else
        {
            Console.WriteLine("Strings are not equal");
        }

        Console.ReadLine();
    }
}

输出结果:

Strings are not equal
自定义比较

除了默认比较,C#还允许开发人员定义其自己的比较规则。要实现自定义比较,您需要实现IComparable接口,并在自己的类中提供比较逻辑。

下面是一个自定义比较的示例:

class Person : IComparable<Person>
{
    public string Name { get; set; }
    public int Age { get; set; }

    public int CompareTo(Person other)
    {
        return this.Age.CompareTo(other.Age);
    }
}

class Program
{
    static void Main(string[] args)
    {
        List<Person> persons = new List<Person>()
        {
            new Person{Name = "John", Age = 25},
            new Person{Name = "Mike", Age = 30},
            new Person{Name = "Anna", Age = 20},
        };

        persons.Sort();

        foreach (Person person in persons)
        {
            Console.WriteLine("{0}, {1}", person.Name, person.Age);
        }

        Console.ReadLine();
    }
}

输出结果:

Anna, 20
John, 25
Mike, 30
比较器比较

如果您希望在比较两个对象时具有更大的灵活性,那么比较器就是您需要的工具。比较器允许您为每个属性定义自己的比较规则。

下面是一个比较器比较的示例:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class PersonComparer : IComparer<Person>
{
    public int Compare(Person x, Person y)
    {
        int result = x.Name.CompareTo(y.Name);

        if (result == 0)
        {
            result = x.Age.CompareTo(y.Age);
        }

        return result;
    }
}

class Program
{
    static void Main(string[] args)
    {
        List<Person> persons = new List<Person>()
        {
            new Person{Name = "John", Age = 25},
            new Person{Name = "Mike", Age = 30},
            new Person{Name = "Anna", Age = 20},
        };

        PersonComparer comparer = new PersonComparer();
        persons.Sort(comparer);

        foreach (Person person in persons)
        {
            Console.WriteLine("{0}, {1}", person.Name, person.Age);
        }

        Console.ReadLine();
    }
}

输出结果:

Anna, 20
John, 25
Mike, 30

在这个示例中,我们定义了一个PersonComparer比较器,并在其中使用了每个属性的比较规则,并在List集合的Sort方法中传递该比较器。Sort方法在排序时将使用比较器中定义的比较规则。

总结

在C#中,有许多方法可以比较对象。默认比较使用对象的引用进行比较。自定义比较允许开发人员定义自己的比较规则。比较器比较允许开发人员为每个属性定义自己的比较规则,从而使比较更灵活。