IStructuralEquatable.Equals(Object, IEqualityComparer) 方法

定義

判斷物件與目前的執行個體在結構上是否相等。

C#
public bool Equals (object other, System.Collections.IEqualityComparer comparer);
C#
public bool Equals (object? other, System.Collections.IEqualityComparer comparer);

參數

other
Object

要與目前執行個體比較的物件。

comparer
IEqualityComparer

物件,判斷目前的執行個體與 other 是否相等。

傳回

如果兩個物件相等則為 true,否則為 false

範例

默認相等比較子 EqualityComparer<Object>.Default.Equals會將兩 NaN 個值視為相等。 不過,在某些情況下,您可能會想要比較 NaN 相等值以傳回 false,這表示無法比較值。 下列範例定義一個實作 NanComparer 介面的 IStructuralEquatable 類別。 它會使用相等運算符來比較兩 Double 個或兩 Single 個值。 它會將任何其他類型的值傳遞至預設相等比較子。

C#
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);
   }
}

下列範例會建立兩個相同的 3 元組物件,其元件包含三 Double 個值。 第二個元件的值是 Double.NaN。 此範例接著會呼叫 Tuple<T1,T2,T3>.Equals 方法,並呼叫 IStructuralEquatable.Equals 方法三次。 第一次,它會傳遞 屬性所 EqualityComparer<T>.Default 傳回的默認相等比較子。 第二次,它會傳遞 屬性所 StructuralComparisons.StructuralEqualityComparer 傳回的默認相等比較子。 第三次,它會傳遞自定義 NanComparer 物件。 如範例的輸出所示,前三個方法呼叫會傳回 true,而第四個呼叫則會傳 false回 。

C#
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

備註

方法 Equals 支援陣列和 Tuple 物件的自訂結構比較。 這個方法接著會呼叫 comparer 物件的 IEqualityComparer.Equals 方法來比較個別的陣列元素或 Tuple 元件,從第一個元素或元件開始。 當方法呼叫傳回或比較所有數組專案或 Tuple 元件之後,個別呼叫 IEqualityComparer.Equals end 和 IStructuralEquatable.Equals 方法會傳回 false 值。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

另請參閱