Tuple<T1,T2,T3,T4>.IStructuralEquatable.Equals Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt einen Wert zurück, der auf Grundlage einer angegebenen Vergleichsmethode angibt, ob das aktuelle Tuple<T1,T2,T3,T4>-Objekt gleich einem angegebenen Objekt ist.
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
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 Item3And4Comparer
Klasse definiert, die die IEqualityComparer Schnittstelle implementiert und die Art und Weise ändert, in der Tuple<T1,T2,T3,T4> Objekte für gleichheit ausgewertet werden. Die Methode gibt immer zurück true
, wenn sie die Item1 Item2 Werte von zwei Tuple<T1,T2,T3,T4> Objekten übergeben und die obj.Equals
Methode aufruft, um ihre Item3 Eigenschaftswerte auszuwerten. Dieser Methodenaufruf gibt true zurück, es ruft auch die Methode auf, um die obj.Equals
Eigenschaftswerte der Tupel auszuwerten Item4 . Die Methode testet daher nur auf den Werten der Item3 Und Item4 Eigenschaften auf Gleichheit. Die Ausgabe veranschaulicht das Ergebnis für einen Datensatz von Tuple<T1,T2,T3,T4> Objekten, die den Namen einer US-Stadt, den Monat eines Jahres und die durchschnittliche hohe und niedrige Temperatur für diesen Monat aufzeichnen.
using System;
using System.Collections;
public class Item3And4Comparer<T1, T2, T3, T4> : IEqualityComparer
{
private int argument = 0;
new public bool Equals(object x, object y)
{
argument++;
// Return true for all values of Item1, Item2.
if (argument <= 2)
return true;
else
return x.Equals(y);
}
public int GetHashCode(object obj)
{
if (obj is T1)
return ((T1) obj).GetHashCode();
else if (obj is T2)
return ((T2) obj).GetHashCode();
else if (obj is T3)
return ((T3) obj).GetHashCode();
else
return ((T4) obj).GetHashCode();
}
}
public class Example
{
public static void Main()
{
Tuple<string, int, double, double>[] temperatures =
{ Tuple.Create("New York, NY", 4, 61.0, 43.0),
Tuple.Create("Chicago, IL", 2, 34.0, 18.0),
Tuple.Create("Newark, NJ", 4, 61.0, 43.0),
Tuple.Create("Boston, MA", 6, 77.0, 59.0),
Tuple.Create("Detroit, MI", 9, 74.0, 53.0),
Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) };
// Compare each item with every other item for equality.
for (int ctr = 0; ctr < temperatures.Length; ctr++)
{
IStructuralEquatable temperatureInfo = temperatures[ctr];
for (int ctr2 = ctr + 1; ctr2 < temperatures.Length; ctr2++)
Console.WriteLine("{0} = {1}: {2}",
temperatureInfo, temperatures[ctr2],
temperatureInfo.Equals(temperatures[ctr2],
new Item3And4Comparer<string, int, double, double>()));
Console.WriteLine();
}
}
}
// The example displays the following output:
// (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
// (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
// (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
// (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
// (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
// (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
//
// (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
// (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
//
// (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False
open System
open System.Collections
type Item3And4Comparer<'T1, 'T2, 'T3, 'T4 when 'T1: equality and 'T2: equality and 'T3: equality and 'T4: equality>() =
let mutable argument = 0
interface IEqualityComparer with
member _.Equals(x: obj, y: obj) =
argument <- argument + 1
// Return true for all values of Item1, Item2.
if argument <= 2 then
true
else
x.Equals y
member _.GetHashCode(obj: obj) =
match obj with
| :? 'T1 as obj ->
obj.GetHashCode()
| :? 'T2 as obj ->
obj.GetHashCode()
| :? 'T3 as obj ->
obj.GetHashCode()
| _ ->
(obj :?> 'T4).GetHashCode()
let temperatures =
[| Tuple.Create("New York, NY", 4, 61.0, 43.0)
Tuple.Create("Chicago, IL", 2, 34.0, 18.0)
Tuple.Create("Newark, NJ", 4, 61.0, 43.0)
Tuple.Create("Boston, MA", 6, 77.0, 59.0)
Tuple.Create("Detroit, MI", 9, 74.0, 53.0)
Tuple.Create("Minneapolis, MN", 8, 81.0, 61.0) |]
// Compare each item with every other item for equality.
for ctr = 0 to temperatures.Length - 1 do
let temperatureInfo: IStructuralEquatable = temperatures[ctr]
for ctr2 = ctr + 1 to temperatures.Length - 1 do
printfn $"{temperatureInfo} = {temperatures[ctr2]}: {temperatureInfo.Equals(temperatures[ctr2], Item3And4Comparer<string, int, double, double>())}"
printfn ""
// The example displays the following output:
// (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
// (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
// (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
// (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
// (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
// (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
//
// (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
// (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
// (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
//
// (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
// (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
//
// (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False
Imports System.Collections
Public Class Item3And4Comparer(Of T1, T2, T3, T4) : Implements IEqualityComparer
Private argument As Integer = 0
Public Overloads Function Equals(x As Object, y As Object) As Boolean _
Implements IEqualityComparer.Equals
argument += 1
' Return true for all values of Item1, Item2.
If argument <= 2 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()
ElseIf TypeOf obj Is T2 Then
Return CType(obj, T2).GetHashCode()
ElseIf TypeOf obj Is T3 Then
REturn CType(Obj, T3).GetHashCode()
Else
Return CType(obj, T4).GetHashCode()
End If
End Function
End Class
Module Example
Public Sub Main()
Dim temperatures() =
{ Tuple.Create("New York, NY", 4, 61, 43), _
Tuple.Create("Chicago, IL", 2, 34, 18), _
Tuple.Create("Newark, NJ", 4, 61, 43), _
Tuple.Create("Boston, MA", 6, 77, 59), _
Tuple.Create("Detroit, MI", 9, 74, 53), _
Tuple.Create("Minneapolis, MN", 8, 81, 61) }
' Compare each item with every other item for equality.
For ctr As Integer = 0 To temperatures.Length - 1
Dim temperatureInfo As IStructuralEquatable = temperatures(ctr)
For ctr2 As Integer = ctr + 1 To temperatures.Length - 1
Console.WriteLine("{0} = {1}: {2}",
temperatureInfo, temperatures(ctr2),
temperatureInfo.Equals(temperatures(ctr2),
New Item3And4Comparer(Of String, Integer, Double, Double)))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
' (New York, NY, 4, 61, 43) = (Chicago, IL, 2, 34, 18): False
' (New York, NY, 4, 61, 43) = (Newark, NJ, 4, 61, 43): True
' (New York, NY, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
' (New York, NY, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
' (New York, NY, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
'
' (Chicago, IL, 2, 34, 18) = (Newark, NJ, 4, 61, 43): False
' (Chicago, IL, 2, 34, 18) = (Boston, MA, 6, 77, 59): False
' (Chicago, IL, 2, 34, 18) = (Detroit, MI, 9, 74, 53): False
' (Chicago, IL, 2, 34, 18) = (Minneapolis, MN, 8, 81, 61): False
'
' (Newark, NJ, 4, 61, 43) = (Boston, MA, 6, 77, 59): False
' (Newark, NJ, 4, 61, 43) = (Detroit, MI, 9, 74, 53): False
' (Newark, NJ, 4, 61, 43) = (Minneapolis, MN, 8, 81, 61): False
'
' (Boston, MA, 6, 77, 59) = (Detroit, MI, 9, 74, 53): False
' (Boston, MA, 6, 77, 59) = (Minneapolis, MN, 8, 81, 61): False
'
' (Detroit, MI, 9, 74, 53) = (Minneapolis, MN, 8, 81, 61): False
Hinweise
Bei diesem Member handelt es sich um eine explizite Schnittstellenmemberimplementierung. Er kann nur verwendet werden, wenn die Tuple<T1,T2,T3,T4>-Instanz in eine IStructuralEquatable-Schnittstelle umgewandelt wird.
Die IEqualityComparer.Equals Implementierung wird nur aufgerufen, wenn other
dies nicht null
der Fall ist, und wenn sie erfolgreich (in C#) umgewandelt oder Visual Basic in ein Tuple<T1,T2,T3,T4> Objekt konvertiert werden kann, dessen Komponenten dieselben Typen wie die aktuelle Instanz aufweisen. Die IStructuralEquatable.Equals(Object, IEqualityComparer) Methode übergibt zunächst die Item1 Werte der Tuple<T1,T2,T3,T4> 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> Objekte übergeben. Wenn dieser Methodenaufruf erneut zurückgegeben true
wird, wird die Methode ein drittes Mal aufgerufen und die Item3 Werte der beiden Tuple<T1,T2,T3,T4> Objekte übergeben. Wenn dieser Methodenaufruf erneut zurückgegeben true
wird, wird die Methode für die vierte und letzte Uhrzeit aufgerufen und die Item4 Werte der beiden Tuple<T1,T2,T3,T4> Objekte übergeben.