public static T1 Max <T1>(this Tuple4 <T1, T1, T1, T1> t) where T1 : IComparable <T1>
 {
     if (t.first.CompareTo(t.second) > 0)
     {
         if (t.first.CompareTo(t.third) > 0)
         {
             if (t.first.CompareTo(t.fourth) > 0)
             {
                 return(t.first);
             }
             else
             {
                 return(t.fourth);
             }
         }
         else
         if (t.third.CompareTo(t.fourth) > 0)
         {
             return(t.third);
         }
         else
         {
             return(t.fourth);
         }
     }
     else if (t.second.CompareTo(t.third) > 0)
     {
         if (t.second.CompareTo(t.fourth) > 0)
         {
             return(t.second);
         }
         else
         {
             return(t.fourth);
         }
     }
     else if (t.third.CompareTo(t.fourth) > 0)
     {
         return(t.third);
     }
     else
     {
         return(t.fourth);
     }
 }
        public static bool operator ==(Tuple4 <T1, T2, T3, T4> a, Tuple4 <T1, T2, T3, T4> b)
        {
            if (Tuple4 <T1, T2, T3, T4> .IsNull(a) && !Tuple4 <T1, T2, T3, T4> .IsNull(b))
            {
                return(false);
            }

            if (!Tuple4 <T1, T2, T3, T4> .IsNull(a) && Tuple4 <T1, T2, T3, T4> .IsNull(b))
            {
                return(false);
            }

            if (Tuple4 <T1, T2, T3, T4> .IsNull(a) && Tuple4 <T1, T2, T3, T4> .IsNull(b))
            {
                return(true);
            }

            return
                (a.first.Equals(b.first) &&
                 a.second.Equals(b.second) &&
                 a.third.Equals(b.third) &&
                 a.fourth.Equals(b.fourth));
        }