IStructuralEquatable.Equals(Object, IEqualityComparer) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Určuje, zda je objekt strukturálně roven aktuální instanci.
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
Parametry
- other
- Object
Objekt k porovnání s aktuální instancí.
- comparer
- IEqualityComparer
Objekt, který určuje, zda jsou aktuální instance a other
rovny.
Návraty
Hodnota true
, pokud jsou oba objekty stejné, jinak hodnota false
Příklady
Výchozí porovnávače rovnosti považuje EqualityComparer<Object>.Default.Equals
dvě NaN
hodnoty za rovnající se. V některých případech však můžete chtít, aby porovnání NaN
hodnot rovnosti vrátilo false
hodnotu , což znamená, že hodnoty nelze porovnat. Následující příklad definuje NanComparer
třídu, která implementuje IStructuralEquatable rozhraní . Porovnává dvě Double nebo dvě Single hodnoty pomocí operátoru rovnosti. Předává hodnoty jakéhokoli jiného typu do výchozího porovnávače rovnosti.
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
Následující příklad vytvoří dva identické řazené objekty se třemi řazenými kolekcemi členů, jejichž komponenty se skládají ze tří Double hodnot. Hodnota druhé komponenty je Double.NaN. Příklad pak zavolá metodu Tuple<T1,T2,T3>.Equals a třikrát zavolá metodu IStructuralEquatable.Equals . Poprvé předá výchozí porovnávač rovnosti, který je vrácen EqualityComparer<T>.Default vlastností . Podruhé předá výchozí porovnávač rovnosti, který je vrácen StructuralComparisons.StructuralEqualityComparer vlastností . Potřetí předá vlastní NanComparer
objekt. Jak ukazuje výstup z příkladu, první tři volání metody vrátí true
, zatímco čtvrté volání vrátí 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
Poznámky
Metoda Equals podporuje vlastní strukturální porovnání objektů pole a řazené kolekce členů. Tato metoda zase volá metodu objektu comparer
IEqualityComparer.Equals k porovnání jednotlivých prvků pole nebo komponent řazené kolekce členů, počínaje prvním prvkem nebo komponentou. Jednotlivá volání na IEqualityComparer.Equals konec a IStructuralEquatable.Equals metoda vrátí hodnotu buď při volání metody, false
nebo po porovnání všech prvků pole nebo řazené kolekce členů.