Export (0) Print
Expand All

Tuple(Of T1, T2, T3, T4, T5, T6).IStructuralEquatable.Equals Method

Returns a value that indicates whether the current Tuple(Of T1, T2, T3, T4, T5, T6) object is equal to a specified object based on a specified comparison method.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

Private Function Equals ( _
	other As Object, _
	comparer As IEqualityComparer _
) As Boolean Implements IStructuralEquatable.Equals


Type: System.Object

The object to compare with this instance.

Type: System.Collections.IEqualityComparer

An object that defines the method to use to evaluate whether the two objects are equal.

Return Value

Type: System.Boolean
true if the current instance is equal to the specified object; otherwise, false.


IStructuralEquatable.Equals(Object, IEqualityComparer)

This member is an explicit interface member implementation. It can be used only when the Tuple(Of T1, T2, T3, T4, T5, T6) instance is cast to an IStructuralEquatable interface.

The IEqualityComparer.Equals implementation is called only if other is not Nothing, and if it can be successfully cast (in C#) or converted (in Visual Basic) to a Tuple(Of T1, T2, T3, T4, T5, T6) object whose components are of the same types as the current instance. The IStructuralEquatable.Equals(Object, IEqualityComparer) method first passes the Item1 values of the Tuple(Of T1, T2, T3, T4, T5, T6) objects to be compared to the IEqualityComparer.Equals implementation. If this method call returns true, the method is called again and passed the Item2 values of the two Tuple(Of T1, T2, T3, T4, T5, T6) objects. This continues until the method call returns false when it compares a specific pair of Item values, or the two Item6 values are passed to the method.

The following example defines a RateComparer class that performs a custom test for equality. If the values that are passed to its IStructuralEquatable.Equals method are of type Single or Double, the method tests for equality by using only up to three fractional digits. Otherwise, it simply calls the x parameter's Equals method. The example uses this IEqualityComparer implementation to determine whether four Tuple(Of T1, T2, T3, T4, T5, T6) objects that contain data on the rate of population change between 1960 and 2000 are equal.

Imports System.Collections

Public Class RateComparer(Of T1, T2, T3, T4, T5, T6) : Implements IEqualityComparer
   Private argument As Integer = 0

   Public Overloads Function Equals(x As Object, y As Object) As Boolean _
                   Implements IEqualityComparer.Equals
      argument += 1
      If argument = 1 Then 
         Return True 
         Dim fx, fy As Double 
         If typeof x Is Double Or typeof x Is Single Then
            fx = CDbl(x)
            fy = CDbl(y)
            Return Math.Round(fx * 1000).Equals(Math.Round(fy * 1000))
            Return x.Equals(y)
         End If 
      End If    
   End Function 

   Public Overloads Function GetHashCode(obj As Object) As Integer _
                    Implements IEqualityComparer.GetHashCode
      If TypeOf(obj) Is Single Or TypeOf(obj) Is Double Then 
         Return Math.Round(CDbl(obj) * 1000).GetHashCode()
         Return obj.GetHashCode()
      End If 
   End Function                 
End Class 

Module Example
   Public Sub Main()
      Dim rate1 = Tuple.Create("New York", .014505, -.1042733, 
                               .0354833, .093644, .0290792)
      Dim rate2 = Tuple.Create("Unknown City", .014505, -.1042733, 
                               .0354833, .093644, .0290792)
      Dim rate3 = Tuple.Create("Unknown City", .014505, -.1042733, 
                               .0354833, .093644, .029079)
      Dim rate4 = Tuple.Create("San Francisco", -.0332858, -.0512803, 
                               .0662544, .0728964, .0491912)
      Dim eq As IStructuralEquatable = rate1
      ' Compare first tuple with remaining two tuples.
      Console.WriteLine("{0} = ", rate1.ToString())
      Console.WriteLine("   {0} : {1}", rate2, 
                        eq.Equals(rate2, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
      Console.WriteLine("   {0} : {1}", rate3, 
                        eq.Equals(rate3, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
      Console.WriteLine("   {0} : {1}", rate4, 
                        eq.Equals(rate4, New RateComparer(Of String, Double, Double, Double, Double, Double)()))
   End Sub 
End Module 
' The example displays the following output: 
'    (New York, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) = 
'       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.0290792) : True 
'       (Unknown City, 0.014505, -0.1042733, 0.0354833, 0.093644, 0.029079) : True 
'       (San Francisco, -0.0332858, -0.0512803, 0.0662544, 0.0728964, 0.0491912) : False

.NET Framework

Supported in: 4.5, 4

.NET Framework Client Profile

Supported in: 4

Portable Class Library

Supported in: Portable Class Library

.NET for Windows Store apps

Supported in: Windows 8

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

© 2014 Microsoft