首先,需要在定义 record 类型时使用 record
关键字,然后重写 Equals
方法。下面是一个简单的 Person
类型记录表,其中含有两个属性 Name
和 Age
:
public record Person(string Name, int Age)
{
public bool Equals(Person other)
{
if (other is null)
return false;
return Name == other.Name && Age == other.Age;
}
public override int GetHashCode() => HashCode.Combine(Name, Age);
}
在这个示例中,我们只需要比较两个 Person
对象的 Name
和 Age
属性是否相等即可。注意,在 Equals
方法中,我们检查 other
参数是否为 null
对象。这可以避免在比较时造成空引用异常。
为了这个示例正常运行,还需要重写 GetHashCode
方法,该方法使用 HashCode.Combine
来合并对象的属性,以生成对象的哈希代码。
下面是一个使用 Person
类型记录表的例子:
var person1 = new Person("Bob", 20);
var person2 = new Person("Bob", 20);
if (person1 == person2)
{
Console.WriteLine("Persons are equal.");
}
else
{
Console.WriteLine("Persons are not equal.");
}
if (person1.Equals(person2))
{
Console.WriteLine("Persons are equal.");
}
else
{
Console.WriteLine("Persons are not equal.");
}
运行上述代码的输出如下:
Persons are not equal.
Persons are equal.
从结果可以看出,当我们使用 ==
进行比较时,两个对象并不相等。但是,当我们使用自定义的 Equals
方法进行比较时,两个对象是相等的。
在另一个示例中,假设我们有一个名为 Employee
的记录类型,包含三个属性:EmployeeId
,Name
,Title
。我们需要根据其中两个属性 EmployeeId
和 Name
来比较是否相等。
public record Employee(string EmployeeId, string Name, string Title)
{
public bool Equals(Employee other)
{
if (other is null)
return false;
return EmployeeId == other.EmployeeId && Name == other.Name;
}
public override int GetHashCode() => HashCode.Combine(EmployeeId, Name);
}
在这个示例中,Equals
方法只比较 EmployeeId
和 Name
属性,忽略了 Title
属性。如果两个 Employee
对象的 EmployeeId
和 Name
属性相同,则它们被认为是相等的对象。
下面是一个使用 Employee
类型记录表的例子:
var employee1 = new Employee("123", "Bob", "Manager");
var employee2 = new Employee("123", "Bob", "Director");
if (employee1 == employee2)
{
Console.WriteLine("Employees are equal.");
}
else
{
Console.WriteLine("Employees are not equal.");
}
if (employee1.Equals(employee2))
{
Console.WriteLine("Employees are equal.");
}
else
{
Console.WriteLine("Employees are not equal.");
}
运行上述代码的输出如下:
Employees are not equal.
Employees are equal.
这个示例和前面的示例一样,在 ==
操作符和自定义的 Equals
方法之间产生了不同的结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.NET 6中为record类型自定义Equals方法 - Python技术站