IStructuralEquatable.Equals(Object, IEqualityComparer) IStructuralEquatable.Equals(Object, IEqualityComparer) IStructuralEquatable.Equals(Object, IEqualityComparer) IStructuralEquatable.Equals(Object, IEqualityComparer) Method

定義

オブジェクトが現在のインスタンスと構造的に等しいかどうかを判断します。Determines whether an object is structurally equal to the current instance.

public:
 bool Equals(System::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 Object Object Object

現在のインスタンスと比較するオブジェクト。The object to compare with the current instance.

comparer
IEqualityComparer IEqualityComparer IEqualityComparer IEqualityComparer

現在のインスタンスと other が等しいかどうかを判断するオブジェクト。An object that determines whether the current instance and other are equal.

戻り値

2 つのオブジェクトが等しい場合は true。それ以外の場合は falsetrue if the two objects are equal; otherwise, false.

既定の等値比較子である @no__t 0 は、2つの NaN 値が等しいと見なされます。The default equality comparer, EqualityComparer<Object>.Default.Equals, considers two NaN values to be equal. ただし、場合によっては、値を比較できないことを示す false を返すように NaN の値の比較が必要になることがあります。However, in some cases, you may want the comparison of NaN values for equality to return false, which indicates that the values cannot be compared. 次の例では、 NanComparer インターフェイスを実装する IStructuralEquatable クラスを定義しています。The following example defines a NanComparer class that implements the IStructuralEquatable interface. 等値演算子を使用して、2つの @no__t 0 または2つの @no__t 値を比較します。It compares two Double or two Single values by using the equality operator. これは、他の型の値を既定の等値比較子に渡します。It passes values of any other type to the default equality comparer.

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つの @no__t 0 の値で構成されるコンポーネントを持つ2つの同一の3タプルオブジェクトを作成します。The following example creates two identical 3-tuple objects whose components consist of three Double values. 2番目のコンポーネントの値は Double.NaN です。The value of the second component is Double.NaN. この例では、Tuple<T1,T2,T3>.Equals メソッドを呼び出し、IStructuralEquatable.Equals メソッドを3回呼び出します。The example then calls the Tuple<T1,T2,T3>.Equals method, and it calls the IStructuralEquatable.Equals method three times. 最初に、EqualityComparer<T>.Default プロパティによって返される既定の等値比較子を渡します。The first time, it passes the default equality comparer that is returned by the EqualityComparer<T>.Default property. 2回目は、StructuralComparisons.StructuralEqualityComparer プロパティによって返される既定の等値比較子を渡します。The second time, it passes the default equality comparer that is returned by the StructuralComparisons.StructuralEqualityComparer property. 3回目は、カスタム NanComparer オブジェクトを渡します。The third time, it passes the custom NanComparer object. この例の出力に示されているように、最初の3つのメソッド呼び出しは true を返し、4番目の呼び出しは-1 @no__t を返します。As the output from the example shows, the first three method calls return true, whereas the fourth call returns 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

注釈

@No__t-0 メソッドは、配列および組オブジェクトのカスタム構造比較をサポートしています。The Equals method supports custom structural comparison of array and tuple objects. 次に、このメソッドは、最初の要素またはコンポーネントを開始位置として、@no__t 0 オブジェクトの @no__t メソッドを呼び出して、個々の配列要素またはタプルコンポーネントを比較します。This method in turn calls the comparer object's IEqualityComparer.Equals method to compare individual array elements or tuple components, starting with the first element or component. 個々の IEqualityComparer.Equals end および IStructuralEquatable.Equals メソッドを呼び出すと、メソッド呼び出しで false が返されたとき、またはすべての配列要素または組コンポーネントが比較された後に、値が返されます。The individual calls to IEqualityComparer.Equals end and the IStructuralEquatable.Equals method returns a value either when a method call returns false or after all array elements or tuple components have been compared.

適用対象

こちらもご覧ください