Tuple<T1,T2>.IStructuralEquatable.Equals Méthode
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.
Retourne une valeur qui indique si l'objet Tuple<T1,T2> actif est égal à un objet spécifié selon une méthode de comparaison spécifiée.
virtual bool System.Collections.IStructuralEquatable.Equals(System::Object ^ other, System::Collections::IEqualityComparer ^ comparer) = System::Collections::IStructuralEquatable::Equals;
bool IStructuralEquatable.Equals (object other, System.Collections.IEqualityComparer comparer);
abstract member System.Collections.IStructuralEquatable.Equals : obj * System.Collections.IEqualityComparer -> bool
override this.System.Collections.IStructuralEquatable.Equals : obj * System.Collections.IEqualityComparer -> bool
Function Equals (other As Object, comparer As IEqualityComparer) As Boolean Implements IStructuralEquatable.Equals
Paramètres
- other
- Object
Objet à comparer avec cette instance.
- comparer
- IEqualityComparer
Un objet qui définit la méthode à utiliser pour évaluer si les deux objets sont égaux.
Retours
true
si l'instance actuelle est égale à l'objet spécifié ; sinon, false
.
Implémente
Exemples
L’exemple suivant définit une Item2Comparer
classe qui implémente l’interface IEqualityComparer et modifie la façon dont Tuple<T1,T2> les objets sont évalués pour l’égalité. La méthode retourne true
toujours lorsqu’elle passe les Item1 valeurs de propriété de deux Tuple<T1,T2> objets, et appelle la IStructuralEquatable.Equals méthode pour évaluer leurs Item2 valeurs de propriété. Par conséquent, la méthode teste l’égalité uniquement en fonction de la valeur de la Item2 propriété. La sortie illustre le résultat d’un jeu de données d’objets Tuple<T1,T2> qui enregistrent les noms des coureurs et les distances qu’ils ont exécutées.
using System;
using System.Collections;
public class Item2Comparer<T1, T2> : IEqualityComparer
{
new public bool Equals(object x, object y)
{
// Return true for all values of Item1.
if (x is T1)
//if (typeof(x) is string)
return true;
else
return x.Equals(y);
}
public int GetHashCode(object obj)
{
if (obj is T1)
return ((T1) obj).GetHashCode();
else
return ((T2) obj).GetHashCode();
}
}
public class Example
{
public static void Main()
{
Tuple<string, double>[] distancesWalked = {
Tuple.Create("Jan", Double.NaN),
Tuple.Create("Joe", Double.NaN),
Tuple.Create("Adam", 1.36),
Tuple.Create("Selena", 2.01),
Tuple.Create("Jake", 1.36) };
for (int ctr = 0; ctr < distancesWalked.Length; ctr++)
{
Tuple<string, double> distanceWalked = distancesWalked[ctr];
for (int ctr2 = ctr + 1; ctr2 < distancesWalked.Length; ctr2++)
{
Console.WriteLine("{0} = {1}: {2}", distanceWalked,
distancesWalked[ctr2],
((IStructuralEquatable)distanceWalked).Equals(distancesWalked[ctr2],
new Item2Comparer<string, double>()));
}
Console.WriteLine();
}
}
}
// The example displays the following output:
// (Jan, NaN) = (Joe, NaN): True
// (Jan, NaN) = (Adam, 1.36): False
// (Jan, NaN) = (Selena, 2.01): False
// (Jan, NaN) = (Jake, 1.36): False
//
// (Joe, NaN) = (Adam, 1.36): False
// (Joe, NaN) = (Selena, 2.01): False
// (Joe, NaN) = (Jake, 1.36): False
//
// (Adam, 1.36) = (Selena, 2.01): False
// (Adam, 1.36) = (Jake, 1.36): True
//
// (Selena, 2.01) = (Jake, 1.36): False
open System
open System.Collections
type Item2Comparer<'T1, 'T2 when 'T1: equality and 'T2: equality>() =
interface IEqualityComparer with
member _.GetHashCode(obj) =
match obj with
| :? 'T1 as obj->
obj.GetHashCode()
| _ ->
(obj :?> 'T2).GetHashCode()
member _.Equals(x, y) =
// Return true for all values of Item1.
match x with
| :? 'T1 ->
true
| _ ->
x.Equals y
let distancesWalked =
[| Tuple.Create("Jan", Double.NaN)
Tuple.Create("Joe", Double.NaN)
Tuple.Create("Adam", 1.36)
Tuple.Create("Selena", 2.01)
Tuple.Create("Jake", 1.36) |]
for ctr = 0 to distancesWalked.Length - 1 do
let distanceWalked = distancesWalked[ctr]
for ctr2 = ctr + 1 to distancesWalked.Length - 1 do
printfn $"{distanceWalked} = {distancesWalked[ctr2]}: {(distanceWalked :> IStructuralEquatable).Equals(distancesWalked[ctr2], Item2Comparer<string, double>())}"
printfn ""
// The example displays the following output:
// (Jan, NaN) = (Joe, NaN): True
// (Jan, NaN) = (Adam, 1.36): False
// (Jan, NaN) = (Selena, 2.01): False
// (Jan, NaN) = (Jake, 1.36): False
//
// (Joe, NaN) = (Adam, 1.36): False
// (Joe, NaN) = (Selena, 2.01): False
// (Joe, NaN) = (Jake, 1.36): False
//
// (Adam, 1.36) = (Selena, 2.01): False
// (Adam, 1.36) = (Jake, 1.36): True
//
// (Selena, 2.01) = (Jake, 1.36): False
Imports System.Collections
Public Class Item2Comparer(Of T1, T2) : Implements IEqualityComparer
Public Overloads Function Equals(x As Object, y As Object) As Boolean _
Implements IEqualityComparer.Equals
' Return true for all values of Item1.
If TypeOf x Is T1 Then
Return True
Else
Return x.Equals(y)
End If
End Function
Public Overloads Function GetHashCode(obj As Object) As Integer _
Implements IEqualityComparer.GetHashCode
If TypeOf obj Is T1 Then
Return CType(obj, T1).GetHashCode()
Else
Return CType(obj, T2).GetHashCode()
End If
End Function
End Class
Module Example
Public Sub Main()
Dim distancesWalked() = {
Tuple.Create("Jan", Double.NaN),
Tuple.Create("Joe", Double.NaN),
Tuple.Create("Adam", 1.36),
Tuple.Create("Selena", 2.01),
Tuple.Create("Jake", 1.36) }
For ctr As Integer = 0 To distancesWalked.Length - 1
Dim distanceWalked As Tuple(Of String, Double) = distancesWalked(ctr)
For ctr2 As Integer = ctr + 1 To distancesWalked.Length - 1
Console.WriteLine("{0} = {1}: {2}", distanceWalked,
distancesWalked(ctr2),
DirectCast(distanceWalked, IStructuralEquatable).Equals(distancesWalked(ctr2),
new Item2Comparer(Of String, Double)))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' (Jan, NaN) = (Joe, NaN): True
' (Jan, NaN) = (Adam, 1.36): False
' (Jan, NaN) = (Selena, 2.01): False
' (Jan, NaN) = (Jake, 1.36): False
'
' (Joe, NaN) = (Adam, 1.36): False
' (Joe, NaN) = (Selena, 2.01): False
' (Joe, NaN) = (Jake, 1.36): False
'
' (Adam, 1.36) = (Selena, 2.01): False
' (Adam, 1.36) = (Jake, 1.36): True
'
' (Selena, 2.01) = (Jake, 1.36): False
Remarques
Ce membre est une implémentation d'un membre d'interface explicite. Il peut uniquement être utilisé lorsque l'instance de Tuple<T1,T2> est castée en interface IStructuralEquatable.
L’implémentation IStructuralEquatable.Equals est appelée uniquement si other
elle n’est pasnull
, et si elle peut être correctement castée (en C#) ou convertie (en Visual Basic) en objet Tuple<T1,T2> dont les composants sont des mêmes types que l’instance actuelle. La IStructuralEquatable.Equals méthode transmet d’abord les Item1 valeurs des Tuple<T1,T2> objets à comparer à l’implémentation IEqualityComparer.Equals . Si cet appel de méthode retourne true
, la méthode est appelée à nouveau et passe les Item2 valeurs des deux Tuple<T1,T2> objets.