IStructuralEquatable.Equals(Object, IEqualityComparer) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Determina se un oggetto è uguale all'istanza corrente dal punto di vista strutturale.
public:
bool Equals(System::Object ^ other, System::Collections::IEqualityComparer ^ comparer);
public bool Equals (object other, System.Collections.IEqualityComparer comparer);
public bool Equals (object? other, System.Collections.IEqualityComparer comparer);
abstract member Equals : obj * System.Collections.IEqualityComparer -> bool
Public Function Equals (other As Object, comparer As IEqualityComparer) As Boolean
Parametri
- other
- Object
Oggetto da confrontare con l'istanza corrente.
- comparer
- IEqualityComparer
Oggetto che determina se l'istanza corrente e other
sono uguali.
Restituisce
true
se i due oggetti sono uguali; in caso contrario, false
.
Esempio
Il comparer di uguaglianza predefinito, , EqualityComparer<Object>.Default.Equals
considera due NaN
valori uguali. Tuttavia, in alcuni casi, è possibile che il confronto di valori per NaN
l'uguaglianza restituisca false
, che indica che i valori non possono essere confrontati. Nell'esempio seguente viene definita una classe NanComparer
che implementa l'interfaccia IStructuralEquatable . Confronta due o due DoubleSingle valori usando l'operatore di uguaglianza. Passa i valori di qualsiasi altro tipo al comparer di uguaglianza predefinito.
using System;
using System.Collections;
using System.Collections.Generic;
public class NanComparer : IEqualityComparer
{
public new bool Equals(object x, object y)
{
if (x is float)
return (float) x == (float) y;
else if (x is double)
return (double) x == (double) y;
else
return EqualityComparer<object>.Default.Equals(x, y);
}
public int GetHashCode(object obj)
{
return EqualityComparer<object>.Default.GetHashCode(obj);
}
}
Imports System.Collections
Imports System.Collections.Generic
Public Class NanComparer : Implements IEqualityComparer
Public Overloads Function Equals(x As Object, y As Object) As Boolean _
Implements IEqualityComparer.Equals
If TypeOf x Is Single Then
Return CSng(x) = CSng(y)
ElseIf TypeOf x Is Double Then
Return CDbl(x) = CDbl(y)
Else
Return EqualityComparer(Of Object).Default.Equals(x, y)
End If
End Function
Public Overloads Function GetHashCode(obj As Object) As Integer _
Implements IEqualityComparer.GetHashCode
Return EqualityComparer(Of Object).Default.GetHashCode(obj)
End Function
End Class
Nell'esempio seguente vengono creati due oggetti 3-tuple identici i cui componenti sono costituiti da tre Double valori. Il valore del secondo componente è Double.NaN. L'esempio chiama quindi il metodo e chiama il Tuple<T1,T2,T3>.EqualsIStructuralEquatable.Equals metodo tre volte. La prima volta, passa il comparer di uguaglianza predefinito restituito dalla EqualityComparer<T>.Default proprietà. La seconda volta, passa il comparer di uguaglianza predefinito restituito dalla StructuralComparisons.StructuralEqualityComparer proprietà. La terza volta, passa l'oggetto personalizzato NanComparer
. Come illustrato dall'output dell'esempio, le prime tre chiamate al metodo restituiscono true
, mentre la quarta chiamata restituisce false
.
public class Example
{
public static void Main()
{
var t1 = Tuple.Create(12.3, Double.NaN, 16.4);
var t2 = Tuple.Create(12.3, Double.NaN, 16.4);
// Call default Equals method.
Console.WriteLine(t1.Equals(t2));
IStructuralEquatable equ = t1;
// Call IStructuralEquatable.Equals using default comparer.
Console.WriteLine(equ.Equals(t2, EqualityComparer<object>.Default));
// Call IStructuralEquatable.Equals using
// StructuralComparisons.StructuralEqualityComparer.
Console.WriteLine(equ.Equals(t2,
StructuralComparisons.StructuralEqualityComparer));
// Call IStructuralEquatable.Equals using custom comparer.
Console.WriteLine(equ.Equals(t2, new NanComparer()));
}
}
// The example displays the following output:
// True
// True
// True
// False
Module Example
Public Sub Main()
Dim t1 = Tuple.Create(12.3, Double.NaN, 16.4)
Dim t2 = Tuple.Create(12.3, Double.NaN, 16.4)
' Call default Equals method.
Console.WriteLine(t1.Equals(t2))
Dim equ As IStructuralEquatable = t1
' Call IStructuralEquatable.Equals using default comparer.
Console.WriteLine(equ.Equals(t2, EqualityComparer(Of Object).Default))
' Call IStructuralEquatable.Equals using
' StructuralComparisons.StructuralEqualityComparer.
Console.WriteLine(equ.Equals(t2,
StructuralComparisons.StructuralEqualityComparer))
' Call IStructuralEquatable.Equals using custom comparer.
Console.WriteLine(equ.Equals(t2, New NanComparer))
End Sub
End Module
' The example displays the following output:
' True
' True
' True
' False
Commenti
Il Equals metodo supporta un confronto strutturale personalizzato di oggetti matrice e tupla. Questo metodo chiama comparer
il metodo dell'oggetto IEqualityComparer.Equals per confrontare singoli elementi della matrice o componenti della tupla, a partire dal primo elemento o componente. Le singole chiamate alla IEqualityComparer.Equals fine e il IStructuralEquatable.Equals metodo restituisce un valore quando viene restituita false
una chiamata di metodo o dopo che sono stati confrontati tutti gli elementi della matrice o i componenti della tupla.