IStructuralEquatable.Equals(Object, IEqualityComparer) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
判斷物件與目前的執行個體在結構上是否相等。
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
參數
- other
- Object
要與目前執行個體比較的物件。
- comparer
- IEqualityComparer
物件,判斷目前的執行個體與 other
是否相等。
傳回
如果兩個物件相等則為 true
,否則為 false
。
範例
默認相等比較子 EqualityComparer<Object>.Default.Equals
會將兩 NaN
個值視為相等。 不過,在某些情況下,您可能會想要比較 NaN
相等值以傳回 false
,這表示無法比較值。 下列範例定義一個實作 NanComparer
介面的 IStructuralEquatable 類別。 它會使用相等運算符來比較兩 Double 個或兩 Single 個值。 它會將任何其他類型的值傳遞至預設相等比較子。
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
下列範例會建立兩個相同的 3 元組物件,其元件包含三 Double 個值。 第二個元件的值是 Double.NaN。 此範例接著會呼叫 Tuple<T1,T2,T3>.Equals 方法,並呼叫 IStructuralEquatable.Equals 方法三次。 第一次,它會傳遞 屬性所 EqualityComparer<T>.Default 傳回的默認相等比較子。 第二次,它會傳遞 屬性所 StructuralComparisons.StructuralEqualityComparer 傳回的默認相等比較子。 第三次,它會傳遞自定義 NanComparer
物件。 如範例的輸出所示,前三個方法呼叫會傳回 true
,而第四個呼叫則會傳 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
備註
方法 Equals 支援陣列和 Tuple 物件的自訂結構比較。 這個方法接著會呼叫 comparer
物件的 IEqualityComparer.Equals 方法來比較個別的陣列元素或 Tuple 元件,從第一個元素或元件開始。 當方法呼叫傳回或比較所有數組專案或 Tuple 元件之後,個別呼叫 IEqualityComparer.Equals end 和 IStructuralEquatable.Equals 方法會傳回 false
值。