IEquatable<T> Interface
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Définit une méthode généralisée qu’un type valeur ou une classe implémente pour créer une méthode spécifique au type pour déterminer l’égalité des instances.
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)
Paramètres de type
- T
Type d’objets à comparer.
- Dérivé
Exemples
L’exemple suivant montre l’implémentation partielle d’une Person classe qui implémente IEquatable<T> et a deux propriétés, LastName et NationalId.
NationalIdest considéré comme un identificateur unique, par conséquent, la méthode retourne True si la NationalId propriété de deux Person objets est identique ; sinon, elle retourne False.Equals
(Notez que l’exemple F# ne gère pas les null valeurs des Person instances.)
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
Remarques
Cette interface est implémentée par des types dont les valeurs peuvent être équivalentes (par exemple, les classes numériques et de chaînes). Un type de valeur ou une classe implémente la Equals méthode pour créer une méthode spécifique au type adaptée à la détermination de l’égalité des instances.
Note
L’interface IComparable<T> définit la CompareTo méthode, qui détermine l’ordre de tri des instances du type d’implémentation. L’interface IEquatable<T> définit la Equals méthode, qui détermine l’égalité des instances du type d’implémentation.
L’interface IEquatable<T> est utilisée par des objets de collection génériques tels que Dictionary<TKey,TValue>, List<T>et LinkedList<T> lors du test de l’égalité dans des méthodes telles que Contains, IndexOf, LastIndexOfet Remove. Elle doit être implémentée pour tout objet susceptible d’être stocké dans une collection générique.
Pour plus d’informations sur l’implémentation de l’interface IEquatable<T> , consultez les remarques sur la IEquatable<T>.Equals méthode.
Notes pour les responsables de l’implémentation
Remplacez le paramètre de type de l’interface IEquatable<T> par le type qui implémente cette interface.
Si vous implémentez IEquatable<T>, vous devez également remplacer les implémentations de classe de base et Equals(Object)GetHashCode() pour que leur comportement soit cohérent avec celui de la Equals(T) méthode. Si vous remplacez Equals(Object), votre implémentation substituée est également appelée dans les appels à la méthode statique Equals(System.Object, System.Object) sur votre classe. En outre, vous devez surcharger les opérateurs et op_Inequality les op_Equality opérateurs. Cela garantit que tous les tests d’égalité retournent des résultats cohérents.
Pour plus d’informations sur la Equals(Object)substitution, consultez Equals(Object).
Pour un type valeur, vous devez toujours implémenter IEquatable<T> et remplacer Equals(Object) pour de meilleures performances. Equals(Object) types de valeurs de zones et s’appuie sur la réflexion pour comparer deux valeurs pour l’égalité. Votre implémentation Equals(T) et votre remplacement Equals(Object) doivent retourner des résultats cohérents.
Si vous implémentez IEquatable<T>, vous devez également implémenter IComparable<T> si des instances de votre type peuvent être triées ou triées. Si votre type implémente, vous implémentez IComparable<T>IEquatable<T>presque toujours également .
Notez qu’il existe certaines conceptions où un type prend en charge une relation d’ordre, mais l’égalité peut être distincte d’une relation de classement. Considérez une Person classe dans laquelle vous triez par ordre alphabétique. Deux personnes portant le même nom trient la même chose, mais ne sont pas la même personne.
Méthodes
| Nom | Description |
|---|---|
| Equals(T) |
Indique si l’objet actuel est égal à un autre objet du même type. |