Tuple<T1,T2,T3,T4>.IStructuralEquatable.Equals 方法

定义

返回一个值,该值根据指定的比较方法指示当前的 Tuple<T1,T2,T3,T4> 对象是否与指定对象相等。

C#
bool IStructuralEquatable.Equals (object other, System.Collections.IEqualityComparer comparer);

参数

other
Object

与该实例进行比较的对象。

comparer
IEqualityComparer

一个对象,该对象定义用于评估两个对象是否相等的方法。

返回

Boolean

如果当前实例等于指定对象,则为 true;否则为 false

实现

示例

以下示例定义一个 Item3And4Comparer 类,该类实现 IEqualityComparer 接口并更改对象求值相等的方式 Tuple<T1,T2,T3,T4> 。 该方法在传递Item1两个Tuple<T1,T2,T3,T4>对象的属性值和Item2属性值时始终返回true,并调用obj.Equals该方法来评估其Item3属性值。 此方法调用返回 true,它还调用 obj.Equals 该方法来评估元组的 Item4 属性值。 因此,该方法仅基于属性的值Item3Item4测试相等性。 输出演示了一组 Tuple<T1,T2,T3,T4> 对象的结果,这些对象记录了美国城市的名称、一年中的月份以及该月的平均高温度和低温。

C#
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

注解

此成员是显式接口成员的实现。 它只能在 Tuple<T1,T2,T3,T4> 实例被强制转换为 IStructuralEquatable 接口时使用。

IEqualityComparer.Equals仅当other不是null时,才能调用该实现,如果可以在 C#) 中成功转换 (,或者Visual Basic) 中Tuple<T1,T2,T3,T4>转换为组件的类型与当前实例相同的对象 (。 该方法IStructuralEquatable.Equals(Object, IEqualityComparer)首先传递Item1要与实现进行比较IEqualityComparer.Equals的对象的值Tuple<T1,T2,T3,T4>。 如果此方法调用返回 true,则再次调用该方法并传递 Item2Tuple<T1,T2,T3,T4> 个对象的值。 如果此方法调用再次返回 true ,则调用该方法第三次并传递 Item3Tuple<T1,T2,T3,T4> 个对象的值。 如果此方法调用再次返回 true ,则第四次和最后一次调用该方法并传递 Item4 了两 Tuple<T1,T2,T3,T4> 个对象的值。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0