Tuple<T1,T2,T3,T4,T5,T6>.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,T3,T4,T5,T6> 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 RateComparer
classe qui effectue un test personnalisé pour l’égalité. Si les valeurs passées à sa IStructuralEquatable.Equals méthode sont de type Single ou Double, la méthode teste l’égalité en utilisant uniquement jusqu’à trois chiffres fractionnaires. Sinon, il appelle simplement la x
méthode du Equals
paramètre. L’exemple utilise cette IEqualityComparer implémentation pour déterminer si quatre Tuple<T1,T2,T3,T4,T5,T6> objets qui contiennent des données sur le taux de changement de population entre 1960 et 2000 sont égaux.
using System;
using System.Collections;
public class RateComparer<T1, T2, T3, T4, T5, T6> : IEqualityComparer
{
private int argument = 0;
public new bool Equals(object x, object y)
{
argument++;
if (argument == 1) return true;
double fx, fy;
if (x is Double || x is Single)
{
fx = (double) x;
fy = (double) y;
return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000));
}
else
{
return x.Equals(y);
}
}
public int GetHashCode(object obj)
{
if (obj is Single || obj is Double)
return Math.Round(((double) obj) * 1000).GetHashCode();
else
return obj.GetHashCode();
}
}
public class Example
{
public static void Main()
{
var rate1 = Tuple.Create("New York", .014505, -.1042733,
.0354833, .093644, .0290792);
var rate2 = Tuple.Create("Unknown City", .014505, -.1042733,
.0354833, .093644, .0290792);
var rate3 = Tuple.Create("Unknown City", .014505, -.1042733,
.0354833, .093644, .029079);
var rate4 = Tuple.Create("San Francisco", -.0332858, -.0512803,
.0662544, .0728964, .0491912);
IStructuralEquatable eq = rate1;
// Compare first tuple with remaining two tuples.
Console.WriteLine("{0} = ", rate1.ToString());
Console.WriteLine(" {0} : {1}", rate2,
eq.Equals(rate2, new RateComparer<string, double, double, double, double, double>()));
Console.WriteLine(" {0} : {1}", rate3,
eq.Equals(rate3, new RateComparer<string, double, double, double, double, double>()));
Console.WriteLine(" {0} : {1}", rate4,
eq.Equals(rate4, new RateComparer<string, double, double, double, double, double>()));
}
}
// The example displays the following output:
// (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
// (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
// (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
// (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False
open System
open System.Collections
type RateComparer<'T1, 'T2, 'T3, 'T4, 'T5, 'T6>() =
let mutable argument = 0
interface IEqualityComparer with
member _.Equals(x, y) =
argument <- argument + 1
if argument = 1 then true
else
match x with
| :? double as fx ->
let fy = y :?> double
Math.Round(fx * 1000.).Equals(Math.Round(fy * 1000.))
| _ ->
x.Equals y
member _.GetHashCode(obj) =
if obj :? Single || obj :? Double then
Math.Round((obj :?> double) * 1000.).GetHashCode()
else
obj.GetHashCode()
let rate1 = Tuple.Create("New York", 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792)
let rate2 = Tuple.Create("Unknown City", 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792)
let rate3 = Tuple.Create("Unknown City", 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079)
let rate4 = Tuple.Create("San Francisco", -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912)
let eq: IStructuralEquatable = rate1
// Compare first tuple with remaining two tuples.
printfn $"{rate1} = "
printfn $" {rate2} : {eq.Equals(rate2, RateComparer<string, double, double, double, double, double>())}"
printfn $" {rate3} : {eq.Equals(rate3, RateComparer<string, double, double, double, double, double>())}"
printfn $" {rate4} : {eq.Equals(rate4, RateComparer<string, double, double, double, double, double>())}"
// The example displays the following output:
// (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
// (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
// (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
// (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False
Imports System.Collections
Public Class RateComparer(Of T1, T2, T3, T4, T5, T6) : Implements IEqualityComparer
Private argument As Integer = 0
Public Overloads Function Equals(x As Object, y As Object) As Boolean _
Implements IEqualityComparer.Equals
argument += 1
If argument = 1 Then
Return True
Else
Dim fx, fy As Double
If typeof x Is Double Or typeof x Is Single Then
fx = CDbl(x)
fy = CDbl(y)
Return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000))
Else
Return x.Equals(y)
End If
End If
End Function
Public Overloads Function GetHashCode(obj As Object) As Integer _
Implements IEqualityComparer.GetHashCode
If TypeOf(obj) Is Single Or TypeOf(obj) Is Double Then
Return Math.Round(CDbl(obj) * 1000).GetHashCode()
Else
Return obj.GetHashCode()
End If
End Function
End Class
Module Example
Public Sub Main()
Dim rate1 = Tuple.Create("New York", .014505, -.1042733,
.0354833, .093644, .0290792)
Dim rate2 = Tuple.Create("Unknown City", .014505, -.1042733,
.0354833, .093644, .0290792)
Dim rate3 = Tuple.Create("Unknown City", .014505, -.1042733,
.0354833, .093644, .029079)
Dim rate4 = Tuple.Create("San Francisco", -.0332858, -.0512803,
.0662544, .0728964, .0491912)
Dim eq As IStructuralEquatable = rate1
' Compare first tuple with remaining two tuples.
Console.WriteLine("{0} = ", rate1.ToString())
Console.WriteLine(" {0} : {1}", rate2,
eq.Equals(rate2, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
Console.WriteLine(" {0} : {1}", rate3,
eq.Equals(rate3, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
Console.WriteLine(" {0} : {1}", rate4,
eq.Equals(rate4, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
End Sub
End Module
' The example displays the following output:
' (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
' (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
' (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
' (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : 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,T3,T4,T5,T6> est castée en interface IStructuralEquatable.
L’implémentation IEqualityComparer.Equals est appelée uniquement si other
n’est pas null
et si elle peut être correctement castée (en C#) ou convertie (en Visual Basic) en un Tuple<T1,T2,T3,T4,T5,T6> objet dont les composants sont des mêmes types que l’instance actuelle. La IStructuralEquatable.Equals(Object, IEqualityComparer) méthode passe d’abord les Item1 valeurs des Tuple<T1,T2,T3,T4,T5,T6> objets à comparer à l’implémentation IEqualityComparer.Equals . Si cet appel de méthode retourne true
, la méthode est appelée à nouveau et a passé les Item2 valeurs des deux Tuple<T1,T2,T3,T4,T5,T6> objets. Cela se poursuit jusqu’à ce que l’appel de méthode retourne false
lorsqu’il compare une paire spécifique de Item
valeurs, ou que les deux Item6 valeurs soient passées à la méthode.