Don't use interfaces for sharing Tuple implementation methods (#44684)
authorMarek Safar <marek.safar@gmail.com>
Tue, 17 Nov 2020 12:06:08 +0000 (13:06 +0100)
committerGitHub <noreply@github.com>
Tue, 17 Nov 2020 12:06:08 +0000 (13:06 +0100)
src/libraries/System.Private.CoreLib/src/System/Tuple.cs

index bb523a7..d6e8700 100644 (file)
@@ -114,11 +114,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1> objTuple))
@@ -131,11 +136,16 @@ namespace System
 
         int IComparable.CompareTo(object? obj)
         {
-            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
+            return CompareTo(obj, Comparer<object>.Default);
         }
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1> objTuple))
@@ -148,27 +158,38 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
-            return comparer.GetHashCode(m_Item1!);
+            return GetHashCode(comparer);
         }
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
         }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
+            return comparer.GetHashCode(m_Item1!);
+        }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(')');
             return sb.ToString();
@@ -213,11 +234,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1, T2> objTuple))
@@ -230,11 +256,16 @@ namespace System
 
         int IComparable.CompareTo(object? obj)
         {
-            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
+            return CompareTo(obj, Comparer<object>.Default);
         }
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1, T2> objTuple))
@@ -251,27 +282,38 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
-            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!));
+            return GetHashCode(comparer);
         }
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
         }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
+            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!));
+        }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(", ");
             sb.Append(m_Item2);
@@ -317,11 +359,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1, T2, T3> objTuple))
@@ -334,11 +381,16 @@ namespace System
 
         int IComparable.CompareTo(object? obj)
         {
-            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
+            return CompareTo(obj, Comparer<object>.Default);
         }
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1, T2, T3> objTuple))
@@ -359,27 +411,38 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
-            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!));
+            return GetHashCode(comparer);
         }
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
         }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
+            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!));
+        }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(", ");
             sb.Append(m_Item2);
@@ -431,11 +494,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1, T2, T3, T4> objTuple))
@@ -448,11 +516,16 @@ namespace System
 
         int IComparable.CompareTo(object? obj)
         {
-            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
+            return CompareTo(obj, Comparer<object>.Default);
         }
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1, T2, T3, T4> objTuple))
@@ -477,27 +550,38 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
-            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!));
+            return GetHashCode(comparer);
         }
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
         }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
+            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!));
+        }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(", ");
             sb.Append(m_Item2);
@@ -555,11 +639,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5> objTuple))
@@ -572,11 +661,16 @@ namespace System
 
         int IComparable.CompareTo(object? obj)
         {
-            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
+            return CompareTo(obj, Comparer<object>.Default);
         }
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5> objTuple))
@@ -605,27 +699,38 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
-            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!), comparer.GetHashCode(m_Item5!));
+            return GetHashCode(comparer);
         }
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
+        }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
+            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!), comparer.GetHashCode(m_Item5!));
         }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(", ");
             sb.Append(m_Item2);
@@ -689,11 +794,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5, T6> objTuple))
@@ -706,11 +816,16 @@ namespace System
 
         int IComparable.CompareTo(object? obj)
         {
-            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
+            return CompareTo(obj, Comparer<object>.Default);
         }
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5, T6> objTuple))
@@ -743,27 +858,38 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
-            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!), comparer.GetHashCode(m_Item5!), comparer.GetHashCode(m_Item6!));
+            return GetHashCode(comparer);
         }
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
         }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
+            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!), comparer.GetHashCode(m_Item5!), comparer.GetHashCode(m_Item6!));
+        }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(", ");
             sb.Append(m_Item2);
@@ -833,11 +959,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple))
@@ -855,6 +986,11 @@ namespace System
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple))
@@ -891,27 +1027,38 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
-            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!), comparer.GetHashCode(m_Item5!), comparer.GetHashCode(m_Item6!), comparer.GetHashCode(m_Item7!));
+            return GetHashCode(comparer);
         }
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
+        }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
+            return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1!), comparer.GetHashCode(m_Item2!), comparer.GetHashCode(m_Item3!), comparer.GetHashCode(m_Item4!), comparer.GetHashCode(m_Item5!), comparer.GetHashCode(m_Item6!), comparer.GetHashCode(m_Item7!));
         }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(", ");
             sb.Append(m_Item2);
@@ -992,11 +1139,16 @@ namespace System
 
         public override bool Equals(object? obj)
         {
-            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
+            return Equals(obj, EqualityComparer<object>.Default);
         }
 
         bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer)
         {
+            return Equals(other, comparer);
+        }
+
+        private bool Equals(object? other, IEqualityComparer comparer)
+        {
             if (other == null) return false;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple))
@@ -1009,11 +1161,16 @@ namespace System
 
         int IComparable.CompareTo(object? obj)
         {
-            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
+            return CompareTo(obj, Comparer<object>.Default);
         }
 
         int IStructuralComparable.CompareTo(object? other, IComparer comparer)
         {
+            return CompareTo(other, comparer);
+        }
+
+        private int CompareTo(object? other, IComparer comparer)
+        {
             if (other == null) return 1;
 
             if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple))
@@ -1054,11 +1211,16 @@ namespace System
 
         public override int GetHashCode()
         {
-            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
+            return GetHashCode(EqualityComparer<object>.Default);
         }
 
         int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
         {
+            return GetHashCode(comparer);
+        }
+
+        private int GetHashCode(IEqualityComparer comparer)
+        {
             // We want to have a limited hash in this case.  We'll use the last 8 elements of the tuple
             ITupleInternal t = (ITupleInternal)m_Rest;
             if (t.Length >= 8) { return t.GetHashCode(comparer); }
@@ -1088,17 +1250,23 @@ namespace System
 
         int ITupleInternal.GetHashCode(IEqualityComparer comparer)
         {
-            return ((IStructuralEquatable)this).GetHashCode(comparer);
+            return GetHashCode(comparer);
         }
+
         public override string ToString()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append('(');
-            return ((ITupleInternal)this).ToString(sb);
+            return ToString(sb);
         }
 
         string ITupleInternal.ToString(StringBuilder sb)
         {
+            return ToString(sb);
+        }
+
+        private string ToString(StringBuilder sb)
+        {
             sb.Append(m_Item1);
             sb.Append(", ");
             sb.Append(m_Item2);