Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

IStructuralEquatable-Schnittstelle

Definiert Methoden, die den Vergleich von Objekten auf strukturelle Gleichheit unterstützen.

Namespace:  System.Collections
Assembly:  mscorlib (in mscorlib.dll)
public interface IStructuralEquatable

Der IStructuralEquatable-Typ macht die folgenden Member verfügbar.

  Name Beschreibung
Öffentliche Methode Equals Bestimmt, ob die Struktur eines Objekt und der aktuellen Instanz gleich ist.
Öffentliche Methode GetHashCode Gibt einen Hashcode für die aktuelle Instanz zurück.
Zum Seitenanfang

Strukturelle Gleichheit bedeutet, dass zwei Objekte gleich sind, weil sie über gleiche Werte verfügen. Es unterscheidet sich von Verweisgleichheit, die angibt, dass zwei Objektverweise gleich sind, da sie auf das gleiche physische Objekt verweisen. Die IStructuralEquatable-Schnittstelle ermöglicht es Ihnen, benutzerdefinierte Vergleiche zur Überprüfung der strukturellen Gleichheit von Auflistungsobjekten zu implementieren. Sie können eine eigene Definition der strukturellen Gleichheit erstellen und angeben, dass diese Definition mit einem Auflistungstyp verwendet wird, der die IStructuralEquatable-Schnittstelle akzeptiert. Die Schnittstelle verfügt über zwei Member: Equals, der mit einer angegebenen IEqualityComparer-Implementierung auf Gleichheit testet, und GetHashCode, der identische Hashcodes für Objekte zurückgibt, die gleich sind.

Hinweis Hinweis

Die IStructuralEquatable-Schnittstelle unterstützt nur benutzerdefinierte Vergleiche für strukturelle Gleichheit. Die IStructuralComparable-Schnittstelle unterstützt benutzerdefinierte strukturelle Vergleiche für Anordnung und Sortierung.

.NET Framework stellt auch Standardgleichheitsvergleiche bereit, die von der EqualityComparer<T>.Default-Eigenschaft und StructuralComparisons.StructuralEqualityComparer-Eigenschaft zurückgegeben werden. Weitere Informationen finden Sie im Beispiel.

Die generischen Tupelklassen (Tuple<T1>, Tuple<T1, T2>, Tuple<T1, T2, T3> usw.) und die Array-Klasse stellen explizite Implementierungen der IStructuralEquatable-Schnittstelle bereit. Durch Umwandeln (in C#) oder Konvertieren (in Visual Basic) der aktuellen Instanz eines Arrays oder Tupels in einen IStructuralEquatable-Schnittstellenwert und Angeben der IEqualityComparer-Implementierung als Argument für die Equals-Methode können Sie einen benutzerdefinierten Gleichheitsvergleich für das Array oder die Auflistung definieren.

Der Standardgleichheitsvergleich EqualityComparer<Object>.Default.Equals betrachtet zwei NaN-Werte als gleich. In einigen Fällen können Sie jedoch den Vergleich von NaN-Werten auf Gleichheit ausführen, um false zurückzugeben; dieser Wert gibt an, dass die Werte nicht verglichen werden können. Im folgenden Beispiel wird eine NanComparer-Klasse definiert, die die IStructuralEquatable-Schnittstelle implementiert. Es vergleicht zwei Double- oder zwei Single-Werte mit dem Gleichheitsoperator. Es übergibt Werte eines beliebigen anderen Typs an den Standardgleichheitsvergleich.


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


Im folgenden Beispiel werden drei identische Tupelobjekte erstellt, deren Komponenten aus drei Double-Werten bestehen. Der Wert der zweiten Komponente ist Double.NaN. In diesem Beispiel wird dann die Tuple<T1, T2, T3>.Equals-Methode aufgerufen, und es wird die IStructuralEquatable.Equals-Methode dreimal aufgerufen. Das erste Mal übergibt es den Standardgleichheitsvergleich, der von der EqualityComparer<T>.Default-Eigenschaft zurückgegeben wird. Das zweite Mal wird der Standardgleichheitsvergleich übergeben, der von der StructuralComparisons.StructuralEqualityComparer-Eigenschaft zurückgegeben wurde. Das dritte Mal wird das benutzerdefinierte NanComparer-Objekt übergeben. Wie die Ausgabe des Beispiels zeigt, geben die ersten drei Methodenaufrufe true zurück, wohingegen der vierte Aufruf false zurückgibt.


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


.NET Framework

Unterstützt in: 4

.NET Framework Client Profile

Unterstützt in: 4

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ