Tuple<T1,T2>.IStructuralEquatable.Equals Yöntem

Tanım

Geçerli Tuple<T1,T2> nesnenin belirtilen bir karşılaştırma yöntemine göre belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür.

 virtual bool System.Collections.IStructuralEquatable.Equals(System::Object ^ other, System::Collections::IEqualityComparer ^ comparer) = System::Collections::IStructuralEquatable::Equals;
bool IStructuralEquatable.Equals (object other, System.Collections.IEqualityComparer comparer);
abstract member System.Collections.IStructuralEquatable.Equals : obj * System.Collections.IEqualityComparer -> bool
override this.System.Collections.IStructuralEquatable.Equals : obj * System.Collections.IEqualityComparer -> bool
Function Equals (other As Object, comparer As IEqualityComparer) As Boolean Implements IStructuralEquatable.Equals

Parametreler

other
Object

Örnekle karşılaştırılacak nesne.

comparer
IEqualityComparer

İki nesnenin eşit olup olmadığını değerlendirmek için kullanılacak yöntemi tanımlayan nesne.

Döndürülenler

Boolean

true geçerli örnek belirtilen nesneye eşitse; aksi takdirde , false.

Uygulamalar

Örnekler

Aşağıdaki örnek, arabirimini uygulayan IEqualityComparer ve nesnelerin eşitlik için değerlendirilme biçimini Tuple<T1,T2> değiştiren bir Item2Comparer sınıfı tanımlar. yöntemi her zaman iki nesnenin Item1 özellik değerleri geçirildiğinde döndürür true ve özellik değerlerini değerlendirmek Item2 için yöntemini çağırırIStructuralEquatable.Equals.Tuple<T1,T2> Sonuç olarak, yöntem yalnızca özelliğinin değerine göre eşitliği sınar Item2 . Çıkış, çalıştırıcıların adlarını ve çalıştırdıkları uzaklıkları kaydeden bir nesne kümesi Tuple<T1,T2> için sonucu gösterir.

using System;
using System.Collections;

public class Item2Comparer<T1, T2> : IEqualityComparer
{
   new public bool Equals(object x, object y)
   {
      // Return true for all values of Item1.
      if (x is T1)
      //if (typeof(x) is string) 
         return true;
      else
         return x.Equals(y);
   }
   
   public int GetHashCode(object obj)
   {
      if (obj is T1)
         return ((T1) obj).GetHashCode();
      else
         return ((T2) obj).GetHashCode();
   }                
}

public class Example
{
   public static void Main()
   {
      Tuple<string, double>[] distancesWalked = {
                        Tuple.Create("Jan", Double.NaN), 
                        Tuple.Create("Joe", Double.NaN), 
                        Tuple.Create("Adam", 1.36), 
                        Tuple.Create("Selena", 2.01),
                        Tuple.Create("Jake", 1.36) };
      for (int ctr = 0; ctr < distancesWalked.Length; ctr++)
      {
         Tuple<string, double> distanceWalked = distancesWalked[ctr];
         for (int ctr2 = ctr + 1; ctr2 < distancesWalked.Length; ctr2++)
         {
            Console.WriteLine("{0} = {1}: {2}", distanceWalked, 
                              distancesWalked[ctr2], 
                              ((IStructuralEquatable)distanceWalked).Equals(distancesWalked[ctr2], 
                                                    new Item2Comparer<string, double>()));
         }
         Console.WriteLine();
      }   
   }
}
// The example displays the following output:
//       (Jan, NaN) = (Joe, NaN): True
//       (Jan, NaN) = (Adam, 1.36): False
//       (Jan, NaN) = (Selena, 2.01): False
//       (Jan, NaN) = (Jake, 1.36): False
//       
//       (Joe, NaN) = (Adam, 1.36): False
//       (Joe, NaN) = (Selena, 2.01): False
//       (Joe, NaN) = (Jake, 1.36): False
//       
//       (Adam, 1.36) = (Selena, 2.01): False
//       (Adam, 1.36) = (Jake, 1.36): True
//       
//       (Selena, 2.01) = (Jake, 1.36): False
open System
open System.Collections

type Item2Comparer<'T1, 'T2 when 'T1: equality and 'T2: equality>() = 
    interface IEqualityComparer with    
        member _.GetHashCode(obj) =
            match obj with
            | :? 'T1 as obj->
                obj.GetHashCode()
            | _ ->
                (obj :?> 'T2).GetHashCode()

        member _.Equals(x, y) =
            // Return true for all values of Item1.
            match x with
            | :? 'T1 ->
                true
            | _ ->
                x.Equals y

let distancesWalked =
    [| Tuple.Create("Jan", Double.NaN) 
       Tuple.Create("Joe", Double.NaN) 
       Tuple.Create("Adam", 1.36)
       Tuple.Create("Selena", 2.01)
       Tuple.Create("Jake", 1.36) |]

for ctr = 0 to distancesWalked.Length - 1 do
    let distanceWalked = distancesWalked[ctr]
    for ctr2 = ctr + 1 to distancesWalked.Length - 1 do
        printfn $"{distanceWalked} = {distancesWalked[ctr2]}: {(distanceWalked :> IStructuralEquatable).Equals(distancesWalked[ctr2], Item2Comparer<string, double>())}"
    printfn ""
// The example displays the following output:
//       (Jan, NaN) = (Joe, NaN): True
//       (Jan, NaN) = (Adam, 1.36): False
//       (Jan, NaN) = (Selena, 2.01): False
//       (Jan, NaN) = (Jake, 1.36): False
//       
//       (Joe, NaN) = (Adam, 1.36): False
//       (Joe, NaN) = (Selena, 2.01): False
//       (Joe, NaN) = (Jake, 1.36): False
//       
//       (Adam, 1.36) = (Selena, 2.01): False
//       (Adam, 1.36) = (Jake, 1.36): True
//       
//       (Selena, 2.01) = (Jake, 1.36): False
Imports System.Collections

Public Class Item2Comparer(Of T1, T2) : Implements IEqualityComparer
   
   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      ' Return true for all values of Item1.
      If TypeOf x Is T1 Then
         Return True
      Else
         Return x.Equals(y)
      End If
   End Function
   
   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf obj Is T1 Then
         Return CType(obj, T1).GetHashCode()
      Else
         Return CType(obj, T2).GetHashCode()
      End If   
   End Function                
End Class

Module Example
   Public Sub Main()
      Dim distancesWalked() = {
                        Tuple.Create("Jan", Double.NaN), 
                        Tuple.Create("Joe", Double.NaN), 
                        Tuple.Create("Adam", 1.36), 
                        Tuple.Create("Selena", 2.01),
                        Tuple.Create("Jake", 1.36) }
      For ctr As Integer = 0 To distancesWalked.Length - 1
         Dim distanceWalked As Tuple(Of String, Double) = distancesWalked(ctr)
         For ctr2 As Integer = ctr + 1 To distancesWalked.Length - 1
            Console.WriteLine("{0} = {1}: {2}", distanceWalked, 
                              distancesWalked(ctr2), 
                              DirectCast(distanceWalked, IStructuralEquatable).Equals(distancesWalked(ctr2), 
                                                    new Item2Comparer(Of String, Double)))
         Next
         Console.WriteLine()
      Next                     
   End Sub
End Module
' The example displays the following output:
'       (Jan, NaN) = (Joe, NaN): True
'       (Jan, NaN) = (Adam, 1.36): False
'       (Jan, NaN) = (Selena, 2.01): False
'       (Jan, NaN) = (Jake, 1.36): False
'       
'       (Joe, NaN) = (Adam, 1.36): False
'       (Joe, NaN) = (Selena, 2.01): False
'       (Joe, NaN) = (Jake, 1.36): False
'       
'       (Adam, 1.36) = (Selena, 2.01): False
'       (Adam, 1.36) = (Jake, 1.36): True
'       
'       (Selena, 2.01) = (Jake, 1.36): False

Açıklamalar

Bu üye, açık bir arabirim üyesi uygulamasıdır. Yalnızca örnek bir IStructuralEquatable arabirime Tuple<T1,T2> yayınlandığında kullanılabilir.

Uygulama IStructuralEquatable.Equals yalnızca other nulldeğilse çağrılır ve başarılı bir şekilde (C#'ta) veya bileşenleri geçerli örnekle aynı türlerde olan bir Tuple<T1,T2> nesneye dönüştürülebilirse (Visual Basic). IStructuralEquatable.Equals yöntemi ilk olarak uygulamayla karşılaştırılacak IEqualityComparer.Equals nesnelerin değerlerini Tuple<T1,T2> geçirirItem1. Bu yöntem çağrısı döndürürsetrue, yöntemi yeniden çağrılır ve iki Tuple<T1,T2> nesnenin Item2 değerleri geçirilir.

Şunlara uygulanır

Ayrıca bkz.