Tuple<T1, T2, T3, T4, T5>.IStructuralEquatable.Equals Method
Returns a value that indicates whether the current Tuple<T1, T2, T3, T4, T5> object is equal to a specified object based on a specified comparison method.
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Parameters
- other
- Type: System.Object
The object to compare with this instance.
- comparer
- Type: System.Collections.IEqualityComparer
An object that defines the method to use to evaluate whether the two objects are equal.
Return Value
Type: System.Booleantrue if the current instance is equal to the specified object; otherwise, false.
Implements
IStructuralEquatable.Equals(Object, IEqualityComparer)This member is an explicit interface member implementation. It can be used only when the Tuple<T1, T2, T3, T4, T5> instance is cast to an IStructuralEquatable interface.
The IEqualityComparer.Equals implementation is called only if other is not null, and if it can be successfully cast (in C#) or converted (in Visual Basic) to a Tuple<T1, T2, T3, T4, T5> 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<T1, T2, T3, T4, T5> 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<T1, T2, T3, T4, T5> objects. This continues until the method call returns false when it compares a specific pair of Item values, or the two Item5 values are passed to the method.
The following example defines a DoubleComparer class that implements the IEqualityComparer interface. The example instantiates two Tuple<T1, T2, T3, T4, T5> objects by using a random number generator to populate their second through fifth components, casts the first instance to an IStructuralEquatable interface, and then uses a DoubleComparer object to test the two Tuple<T1, T2, T3, T4, T5> objects for approximate equality.
using System; using System.Collections; public class DoubleComparer<T1, T2, T3, T4, T5> : IEqualityComparer { private double difference; private int argument = 0; public DoubleComparer(double difference) { this.difference = difference; } new public bool Equals(object x, object y) { argument += 1; // Return true for Item1. if (argument == 1) return true; double d1 = (double)x; double d2 = (double)y; if (d1 - d2 < d1 * difference) return true; else return false; } 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 if (obj is T4) return ((T4)obj).GetHashCode(); else return ((T5)obj).GetHashCode(); } } public class Example { public static void Demo(System.Windows.Controls.TextBlock outputBlock) { var value1 = GetValues(1); var value2 = GetValues(2); IStructuralEquatable iValue1 = value1; outputBlock.Text += String.Format("{0} =\n{1} :\n{2}", value1, value2, iValue1.Equals(value2, new DoubleComparer<int, double, double, double, double>(.01))) + "\n"; } private static Tuple<int, double, double, double, double> GetValues(int ctr) { // Generate four random numbers between 0 and 1 Random rnd = new Random((int)DateTime.Now.Ticks >> 32 >> ctr); return Tuple.Create(ctr, rnd.NextDouble(), rnd.NextDouble(), rnd.NextDouble(), rnd.NextDouble()); } }
For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.