Tuple<T1,T2,T3,T4,T5,T6,T7>.IStructuralEquatable.Equals Methode

Definition

Gibt einen Wert zurück, der auf Grundlage einer angegebenen Vergleichsmethode angibt, ob das aktuelle Tuple<T1,T2,T3,T4,T5,T6,T7>-Objekt gleich einem angegebenen Objekt ist.

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

Parameter

other
Object

Das Objekt, das mit dieser Instanz verglichen werden soll.

comparer
IEqualityComparer

Ein Objekt, das die Methode definiert, mit der ermittelt wird, ob die beiden Objekte gleich sind.

Gibt zurück

true, wenn die aktuelle Instanz gleich dem angegebenen Objekt ist, andernfalls false.

Implementiert

Beispiele

Im folgenden Beispiel wird eine RateComparer Klasse definiert, die einen benutzerdefinierten Test auf Gleichheit durchführt. Wenn die Werte, die an die IStructuralEquatable.Equals -Methode übergeben werden, vom Typ Single oder Doublesind, testet die Methode auf Gleichheit, indem nur bis zu drei Bruchstellen verwendet werden. Andernfalls wird einfach die x Methode des Equals Parameters aufgerufen. Im Beispiel wird anhand dieser IEqualityComparer Implementierung ermittelt, ob vier Tuple<T1,T2,T3,T4,T5,T6,T7> Objekte, die Daten zur Rate der Bevölkerungsänderung zwischen 1950 und 2000 enthalten, gleich sind.

C#
using System;
using System.Collections;

public class RateComparer<T1, T2, T3, T4, T5, T6, T7> : IEqualityComparer
{
   private int argument = 0;

   public new bool Equals(object x, object y)
   {
      argument++;
      if (argument == 1) return true;

      double fx, fy;
      if (x is Double || x is Single)
      {
            fx = (double) x;
            fy = (double) y;
            return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000));
      }
      else
      {
         return x.Equals(y);
      }
   }

   public int GetHashCode(object obj)
   {
      if (obj is Single || obj is Double)
         return Math.Round(((double) obj) * 1000).GetHashCode();
      else
         return obj.GetHashCode();
   }
}

public class Example
{
   public static void Main()
   {
      var rate1 = Tuple.Create("New York", -.013934, .014505,
                               -.1042733, .0354833, .093644, .0290792);
      var rate2 = Tuple.Create("Unknown City", -.013934, .014505,
                               -.1042733, .0354833, .093644, .0290792);
      var rate3 = Tuple.Create("Unknown City", -.013934, .014505,
                               -.1042733, .0354833, .093644, .029079);
      var rate4 = Tuple.Create("San Francisco", -.0451934, -.0332858,
                               -.0512803, .0662544, .0728964, .0491912);
      IStructuralEquatable eq = rate1;
      // Compare first tuple with remaining two tuples.
      Console.WriteLine("{0} = ", rate1.ToString());
      Console.WriteLine("   {0} : {1}", rate2,
                        eq.Equals(rate2, new RateComparer<string, double, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate3,
                        eq.Equals(rate3, new RateComparer<string, double, double, double, double, double, double>()));
      Console.WriteLine("   {0} : {1}", rate4,
                        eq.Equals(rate4, new RateComparer<string, double, double,double,  double, double, double>()));
   }
}
// The example displays the following output:
//    (New York, -0.013934, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) =
//       (Unknown City, -0.013934, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True
//       (Unknown City, -0.013934, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True
//       (San Francisco, -0.0451934, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False

Hinweise

Bei diesem Member handelt es sich um eine explizite Schnittstellenmemberimplementierung. Er kann nur verwendet werden, wenn die Tuple<T1,T2,T3,T4,T5,T6,T7>-Instanz in eine IStructuralEquatable-Schnittstelle umgewandelt wird.

Die IEqualityComparer.Equals Implementierung wird nur aufgerufen, wenn keine andere nullist, und wenn sie erfolgreich (in C#) oder konvertiert werden kann (in Visual Basic) in ein Tuple<T1,T2,T3,T4,T5,T6,T7> Objekt, dessen Komponenten denselben Typen wie die aktuelle Instanz aufweisen. Die IStructuralEquatable.Equals(Object, IEqualityComparer) -Methode übergibt zunächst die Item1 Werte der Tuple<T1,T2,T3,T4,T5,T6,T7> Objekte, die mit der IEqualityComparer.Equals Implementierung verglichen werden sollen. Wenn dieser Methodenaufruf zurückgibt true, wird die -Methode erneut aufgerufen und die Item2 Werte der beiden Tuple<T1,T2,T3,T4,T5,T6,T7> Objekte übergeben. Dies wird fortgesetzt, bis der Methodenaufruf zurückgegeben wird false , wenn ein bestimmtes Wertepaar Item verglichen wird, oder bis die beiden Item7 Werte an die -Methode übergeben werden.

Gilt für:

Produkt Versionen
.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, 10
.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