IEquatable<T> 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
定义值类型或类实现的通用方法,以创建特定于类型的方法来确定实例的相等性。
generic <typename T>
public interface class IEquatable
public interface IEquatable<T>
public interface IEquatable<T> where T : allows ref struct
type IEquatable<'T> = interface
Public Interface IEquatable(Of T)
类型参数
- T
要比较的对象的类型。
- 派生
示例
下面的示例演示实现IEquatable<T>并具有两个Person属性的类的部分实现。 LastNameNationalId
NationalId被视为唯一标识符,因此,Equals如果NationalId两Person个对象的属性相同,则该方法返回FalseTrue;否则返回。
(请注意,F# 示例不处理 null 实例的值 Person 。)
public class Person : IEquatable<Person>
{
public Person(string lastName, string ssn)
{
LastName = lastName;
NationalId = ssn;
}
public string LastName { get; }
public string NationalId { get; }
public bool Equals(Person? other) => other is not null && other.NationalId == NationalId;
public override bool Equals(object? obj) => Equals(obj as Person);
public override int GetHashCode() => NationalId.GetHashCode();
public static bool operator ==(Person person1, Person person2)
{
if (person1 is null)
{
return person2 is null;
}
return person1.Equals(person2);
}
public static bool operator !=(Person person1, Person person2)
{
if (person1 is null)
{
return person2 is not null;
}
return !person1.Equals(person2);
}
}
open System
type Person(lastName: string, nationalId: string) =
member this.LastName = lastName
member this.NationalId = nationalId
interface IEquatable<Person> with
member this.Equals(other: Person) =
other.NationalId = this.NationalId
override this.Equals(obj: obj) =
match obj with
| :? Person as person -> (this :> IEquatable<Person>).Equals(person)
| _ -> false
override this.GetHashCode() =
this.NationalId.GetHashCode()
static member (==) (person1: Person, person2: Person) =
person1.Equals(person2)
static member (!=) (person1: Person, person2: Person) =
not (person1.Equals(person2))
Public Class Person
Implements IEquatable(Of Person)
Public Sub New(lastName As String, nationalId As String)
Me.LastName = lastName
Me.NationalId = nationalId
End Sub
Public ReadOnly Property LastName As String
Public ReadOnly Property NationalId As String
Public Overloads Function Equals(other As Person) As Boolean Implements IEquatable(Of Person).Equals
Return other IsNot Nothing AndAlso other.NationalId = Me.NationalId
End Function
Public Overrides Function Equals(obj As Object) As Boolean
Return Equals(TryCast(obj, Person))
End Function
Public Overrides Function GetHashCode() As Integer
Return NationalId.GetHashCode()
End Function
Public Shared Operator =(person1 As Person, person2 As Person) As Boolean
If person1 Is Nothing Then
Return person2 Is Nothing
End If
Return person1.Equals(person2)
End Operator
Public Shared Operator <>(person1 As Person, person2 As Person) As Boolean
If person1 Is Nothing Then
Return person2 IsNot Nothing
End If
Return Not person1.Equals(person2)
End Operator
End Class
注解
此接口由其值可以相等的类型实现(例如,数字类和字符串类)。 值类型或类实现 Equals 用于创建适合确定实例相等性的类型特定方法的方法。
注意
该 IComparable<T> 接口定义 CompareTo 方法,该方法确定实现类型的实例的排序顺序。 该 IEquatable<T> 接口定义 Equals 方法,该方法确定实现类型的实例的相等性。
接口IEquatable<T>由泛型集合对象(例如Dictionary<TKey,TValue>,List<T>)使用,以及在LinkedList<T>测试等方法(如Contains、IndexOfLastIndexOf和Remove)中的相等性时。 它应该针对可能存储在泛型集合中的任何对象实现。
有关实现 IEquatable<T> 接口的详细信息,请参阅有关 IEquatable<T>.Equals 该方法的备注。
实施者说明
将接口的类型 IEquatable<T> 参数替换为实现此接口的类型。
如果实现IEquatable<T>,还应重写其基类实现Equals(Object)GetHashCode(),使其行为与Equals(T)该方法的行为一致。 如果确实重写 Equals(Object),则重写的实现也会在对类上的静态 Equals(System.Object, System.Object) 方法的调用中调用。 此外,还应重载 op_Equality 和 op_Inequality 运算符。 这可确保所有相等性测试都返回一致的结果。
有关重写 Equals(Object)的信息,请参阅 Equals(Object)。
对于值类型,应始终实现 IEquatable<T> 和替代 Equals(Object) 以提高性能。 Equals(Object) 框值类型并依赖于反射来比较两个值是否相等。 实现 Equals(T) 和替代 Equals(Object) 应返回一致的结果。
如果实现,还应实现IEquatable<T>IComparable<T>类型实例的排序或排序。 如果类型实现 IComparable<T>,则几乎始终实现 IEquatable<T>。
请注意,有些设计支持顺序关系,但相等性可能与排序关系不同。 请考虑按 Person 字母顺序排序的类。 同名的两个人排序相同,但不是同一个人。
方法
| 名称 | 说明 |
|---|---|
| Equals(T) |
指示当前对象是否等于同一类型的另一个对象。 |