📅  最后修改于: 2023-12-03 14:39:47.259000             🧑  作者: Mango
在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#中,有许多方法可以比较对象。默认比较使用对象的引用进行比较。自定义比较允许开发人员定义自己的比较规则。比较器比较允许开发人员为每个属性定义自己的比较规则,从而使比较更灵活。