Tuple<T1,T2,T3,T4>.IStructuralEquatable.Equals Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Returnerar ett värde som anger om det aktuella Tuple<T1,T2,T3,T4> objektet är lika med ett angivet objekt baserat på en angiven jämförelsemetod.
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
Parametrar
- other
- Object
Det objekt som ska jämföras med den här instansen.
- comparer
- IEqualityComparer
Ett objekt som definierar den metod som ska användas för att utvärdera om de två objekten är lika med.
Returer
trueom den aktuella instansen är lika med det angivna objektet; annars . false
Implementeringar
Exempel
I följande exempel definieras en Item3And4Comparer klass som implementerar IEqualityComparer gränssnittet och ändrar hur Tuple<T1,T2,T3,T4> objekt utvärderas för likhet. Metoden returnerar true alltid när den skickas egenskapsvärdena Item1 och Item2 för två Tuple<T1,T2,T3,T4> objekt och anropar obj.Equals metoden för att utvärdera deras egenskapsvärden Item3 . Det här metodanropet returnerar true, det anropar obj.Equals även metoden för att utvärdera tupplars egenskapsvärden Item4 . Därför testas metoden för likhet endast baserat på värdena för Item3 egenskaperna och Item4 . Utdata illustrerar resultatet för en datauppsättning med Tuple<T1,T2,T3,T4> objekt som registrerar namnet på en amerikansk stad, månaden på ett år och den genomsnittliga höga och låga temperaturen för den månaden.
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
Kommentarer
Den här medlemmen är en explicit implementering av gränssnittsmedlemmar. Den kan endast användas när instansen Tuple<T1,T2,T3,T4> skickas till ett IStructuralEquatable gränssnitt.
Implementeringen IEqualityComparer.Equals anropas endast om other inte är null, och om den kan konverteras (i C#) eller konverteras (i Visual Basic) till ett Tuple<T1,T2,T3,T4> objekt vars komponenter är av samma typ som den aktuella instansen. Metoden IStructuralEquatable.Equals(Object, IEqualityComparer) skickar först värdena för Item1 de objekt som Tuple<T1,T2,T3,T4> ska jämföras med implementeringen IEqualityComparer.Equals . Om det här metodanropet returnerar trueanropas metoden igen och skickar värdena för Item2 de två Tuple<T1,T2,T3,T4> objekten. Om det här metodanropet returnerar true igen anropas metoden en tredje gång och skickar värdena för Item3 de två Tuple<T1,T2,T3,T4> objekten. Om det här metodanropet returnerar true igen anropas metoden för fjärde och sista gången och skickar värdena för Item4 de två Tuple<T1,T2,T3,T4> objekten.