1808 lines · 100.7 KB · C#
RawDownload
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace System
{
    internal interface ITuple
    {
        int Size
        {
            get;
        }
        string ToString(StringBuilder sb);
        int GetHashCode(IEqualityComparer comparer);
    }
    /// <summary>Defines methods to support the comparison of objects for structural equality. </summary>
    [__DynamicallyInvokable]
    public interface IStructuralEquatable
    {
        /// <summary>Determines whether an object is structurally equal to the current instance.</summary>
        /// <returns>true if the two objects are equal; otherwise, false.</returns>
        /// <param name="other">The object to compare with the current instance.</param>
        /// <param name="comparer">An object that determines whether the current instance and <paramref name="other" /> are equal. </param>
        [__DynamicallyInvokable]
        bool Equals(object other, IEqualityComparer comparer);
        /// <summary>Returns a hash code for the current instance.</summary>
        /// <returns>The hash code for the current instance.</returns>
        /// <param name="comparer">An object that computes the hash code of the current object.</param>
        [__DynamicallyInvokable]
        int GetHashCode(IEqualityComparer comparer);
    }
    /// <summary>Supports the structural comparison of collection objects.</summary>
    [__DynamicallyInvokable]
    public interface IStructuralComparable
    {
        /// <summary>Determines whether the current collection object precedes, occurs in the same position as, or follows another object in the sort order.</summary>
        /// <returns>An integer that indicates the relationship of the current collection object to <paramref name="other" />, as shown in the following table.Return valueDescription-1The current instance precedes <paramref name="other" />.0The current instance and <paramref name="other" /> are equal.1The current instance follows <paramref name="other" />.</returns>
        /// <param name="other">The object to compare with the current instance.</param>
        /// <param name="comparer">An object that compares members of the current collection object with the corresponding members of <paramref name="other" />.</param>
        /// <exception cref="T:System.ArgumentException">This instance and <paramref name="other" /> are not the same type.</exception>
        [__DynamicallyInvokable]
        int CompareTo(object other, IComparer comparer);
    }
    /// <summary>Provides static methods for creating tuple objects. </summary>
    [__DynamicallyInvokable]
    public static class Tuple
    {
        /// <summary>Creates a new 1-tuple, or singleton.</summary>
        /// <returns>A tuple whose value is (<paramref name="item1" />).</returns>
        /// <param name="item1">The value of the only component of the tuple.</param>
        /// <typeparam name="T1">The type of the only component of the tuple.</typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1> Create<T1>(T1 item1)
        {
            return new Tuple<T1>(item1);
        }
        /// <summary>Creates a new 2-tuple, or pair.</summary>
        /// <returns>A 2-tuple whose value is (<paramref name="item1" />, <paramref name="item2" />).</returns>
        /// <param name="item1">The value of the first component of the tuple.</param>
        /// <param name="item2">The value of the second component of the tuple.</param>
        /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
        /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
        {
            return new Tuple<T1, T2>(item1, item2);
        }
        /// <summary>Creates a new 3-tuple, or triple.</summary>
        /// <returns>A 3-tuple whose value is (<paramref name="item1" />, <paramref name="item2" />, <paramref name="item3" />).</returns>
        /// <param name="item1">The value of the first component of the tuple.</param>
        /// <param name="item2">The value of the second component of the tuple.</param>
        /// <param name="item3">The value of the third component of the tuple.</param>
        /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
        /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
        /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3)
        {
            return new Tuple<T1, T2, T3>(item1, item2, item3);
        }
        /// <summary>Creates a new 4-tuple, or quadruple.</summary>
        /// <returns>A 4-tuple whose value is (<paramref name="item1" />, <paramref name="item2" />, <paramref name="item3" />, <paramref name="item4" />).</returns>
        /// <param name="item1">The value of the first component of the tuple.</param>
        /// <param name="item2">The value of the second component of the tuple.</param>
        /// <param name="item3">The value of the third component of the tuple.</param>
        /// <param name="item4">The value of the fourth component of the tuple.</param>
        /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
        /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
        /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
        /// <typeparam name="T4">The type of the fourth component of the tuple.  </typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4)
        {
            return new Tuple<T1, T2, T3, T4>(item1, item2, item3, item4);
        }
        /// <summary>Creates a new 5-tuple, or quintuple.</summary>
        /// <returns>A 5-tuple whose value is (<paramref name="item1" />, <paramref name="item2" />, <paramref name="item3" />, <paramref name="item4" />, <paramref name="item5" />).</returns>
        /// <param name="item1">The value of the first component of the tuple.</param>
        /// <param name="item2">The value of the second component of the tuple.</param>
        /// <param name="item3">The value of the third component of the tuple.</param>
        /// <param name="item4">The value of the fourth component of the tuple.</param>
        /// <param name="item5">The value of the fifth component of the tuple.</param>
        /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
        /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
        /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
        /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
        /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
        {
            return new Tuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);
        }
        /// <summary>Creates a new 6-tuple, or sextuple.</summary>
        /// <returns>A 6-tuple whose value is (<paramref name="item1" />, <paramref name="item2" />, <paramref name="item3" />, <paramref name="item4" />, <paramref name="item5" />, <paramref name="item6" />).</returns>
        /// <param name="item1">The value of the first component of the tuple.</param>
        /// <param name="item2">The value of the second component of the tuple.</param>
        /// <param name="item3">The value of the third component of the tuple.</param>
        /// <param name="item4">The value of the fourth component of the tuple.</param>
        /// <param name="item5">The value of the fifth component of the tuple.</param>
        /// <param name="item6">The value of the sixth component of the tuple.</param>
        /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
        /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
        /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
        /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
        /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
        /// <typeparam name="T6">The type of the sixth component of the tuple.</typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);
        }
        /// <summary>Creates a new 7-tuple, or septuple.</summary>
        /// <returns>A 7-tuple whose value is (<paramref name="item1" />, <paramref name="item2" />, <paramref name="item3" />, <paramref name="item4" />, <paramref name="item5" />, <paramref name="item6" />, <paramref name="item7" />).</returns>
        /// <param name="item1">The value of the first component of the tuple.</param>
        /// <param name="item2">The value of the second component of the tuple.</param>
        /// <param name="item3">The value of the third component of the tuple.</param>
        /// <param name="item4">The value of the fourth component of the tuple.</param>
        /// <param name="item5">The value of the fifth component of the tuple.</param>
        /// <param name="item6">The value of the sixth component of the tuple.</param>
        /// <param name="item7">The value of the seventh component of the tuple.</param>
        /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
        /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
        /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
        /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
        /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
        /// <typeparam name="T6">The type of the sixth component of the tuple.</typeparam>
        /// <typeparam name="T7">The type of the seventh component of the tuple.</typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
        }
        /// <summary>Creates a new 8-tuple, or octuple.</summary>
        /// <returns>An 8-tuple (octuple) whose value is (<paramref name="item1" />, <paramref name="item2" />, <paramref name="item3" />, <paramref name="item4" />, <paramref name="item5" />, <paramref name="item6" />, <paramref name="item7" />, <paramref name="item8" />). </returns>
        /// <param name="item1">The value of the first component of the tuple.</param>
        /// <param name="item2">The value of the second component of the tuple.</param>
        /// <param name="item3">The value of the third component of the tuple.</param>
        /// <param name="item4">The value of the fourth component of the tuple.</param>
        /// <param name="item5">The value of the fifth component of the tuple.</param>
        /// <param name="item6">The value of the sixth component of the tuple.</param>
        /// <param name="item7">The value of the seventh component of the tuple.</param>
        /// <param name="item8">The value of the eighth component of the tuple.</param>
        /// <typeparam name="T1">The type of the first component of the tuple.</typeparam>
        /// <typeparam name="T2">The type of the second component of the tuple.</typeparam>
        /// <typeparam name="T3">The type of the third component of the tuple.</typeparam>
        /// <typeparam name="T4">The type of the fourth component of the tuple.</typeparam>
        /// <typeparam name="T5">The type of the fifth component of the tuple.</typeparam>
        /// <typeparam name="T6">The type of the sixth component of the tuple.</typeparam>
        /// <typeparam name="T7">The type of the seventh component of the tuple.</typeparam>
        /// <typeparam name="T8">The type of the eighth component of the tuple.</typeparam>
        [__DynamicallyInvokable]
        public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8)
        {
            return new Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<T8>(item8));
        }
        internal static int CombineHashCodes(int h1, int h2)
        {
            return (h1 << 5) + h1 ^ h2;
        }
        internal static int CombineHashCodes(int h1, int h2, int h3)
        {
            return Tuple.CombineHashCodes(Tuple.CombineHashCodes(h1, h2), h3);
        }
        internal static int CombineHashCodes(int h1, int h2, int h3, int h4)
        {
            return Tuple.CombineHashCodes(Tuple.CombineHashCodes(h1, h2), Tuple.CombineHashCodes(h3, h4));
        }
        internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5)
        {
            return Tuple.CombineHashCodes(Tuple.CombineHashCodes(h1, h2, h3, h4), h5);
        }
        internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6)
        {
            return Tuple.CombineHashCodes(Tuple.CombineHashCodes(h1, h2, h3, h4), Tuple.CombineHashCodes(h5, h6));
        }
        internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7)
        {
            return Tuple.CombineHashCodes(Tuple.CombineHashCodes(h1, h2, h3, h4), Tuple.CombineHashCodes(h5, h6, h7));
        }
        internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8)
        {
            return Tuple.CombineHashCodes(Tuple.CombineHashCodes(h1, h2, h3, h4), Tuple.CombineHashCodes(h5, h6, h7, h8));
        }
    }
    /// <summary>Represents a 1-tuple, or singleton. </summary>
    /// <typeparam name="T1">The type of the tuple's only component.</typeparam>
    /// <filterpriority>1</filterpriority>
    [__DynamicallyInvokable]
    [Serializable]
    public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
    {
        private readonly T1 m_Item1;
        /// <summary>Gets the value of the <see cref="T:System.Tuple`1" /> object's single component. </summary>
        /// <returns>The value of the current <see cref="T:System.Tuple`1" /> object's single component.</returns>
        [__DynamicallyInvokable]
        public T1 Item1
        {
            [__DynamicallyInvokable]
            get
            {
                return this.m_Item1;
            }
        }
        int ITuple.Size
        {
            get
            {
                return 1;
            }
        }
        /// <summary>Initializes a new instance of the <see cref="T:System.Tuple`1" /> class.</summary>
        /// <param name="item1">The value of the tuple's only component.</param>
        [__DynamicallyInvokable]
        public Tuple(T1 item1)
        {
            this.m_Item1 = item1;
        }
        /// <summary>Returns a value that indicates whether the current <see cref="T:System.Tuple`1" /> object is equal to a specified object.</summary>
        /// <returns>true if the current instance is equal to the specified object; otherwise, false.</returns>
        /// <param name="obj">The object to compare with this instance.</param>
        [__DynamicallyInvokable]
        public override bool Equals(object obj)
        {
            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
        }
        /// <summary>Returns a value that indicates whether the current <see cref="T:System.Tuple`1" /> object is equal to a specified object based on a specified comparison method.</summary>
        /// <returns>true if the current instance is equal to the specified object; otherwise, false.</returns>
        /// <param name="other">The object to compare with this instance.</param>
        /// <param name="comparer">An object that defines the method to use to evaluate whether the two objects are equal.</param>
        [__DynamicallyInvokable]
        bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
        {
            if (other == null)
            {
                return false;
            }
            Tuple<T1> tuple = other as Tuple<T1>;
            return tuple != null && comparer.Equals(this.m_Item1, tuple.m_Item1);
        }
        /// <summary>Compares the current <see cref="T:System.Tuple`1" /> object to a specified object, and returns an integer that indicates whether the current object is before, after, or in the same position as the specified object in the sort order.</summary>
        /// <returns>A signed integer that indicates the relative position of this instance and <paramref name="obj" /> in the sort order, as shown in the following table.ValueDescriptionA negative integerThis instance precedes <paramref name="obj" />.ZeroThis instance and <paramref name="obj" /> have the same position in the sort order.A positive integerThis instance follows <paramref name="obj" />.</returns>
        /// <param name="obj">An object to compare with the current instance.</param>
        /// <exception cref="T:System.ArgumentException">
        ///   <paramref name="obj" /> is not a <see cref="T:System.Tuple`1" /> object.</exception>
        [__DynamicallyInvokable]
        int IComparable.CompareTo(object obj)
        {
            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
        }
        /// <summary>Compares the current <see cref="T:System.Tuple`1" /> object to a specified object by using a specified comparer, and returns an integer that indicates whether the current object is before, after, or in the same position as the specified object in the sort order.</summary>
        /// <returns>A signed integer that indicates the relative position of this instance and <paramref name="other" /> in the sort order, as shown in the following table.ValueDescriptionA negative integerThis instance precedes <paramref name="other" />.ZeroThis instance and <paramref name="other" /> have the same position in the sort order.A positive integerThis instance follows <paramref name="other" />.</returns>
        /// <param name="other">An object to compare with the current instance.</param>
        /// <param name="comparer">An object that provides custom rules for comparison.</param>
        /// <exception cref="T:System.ArgumentException">
        ///   <paramref name="other" /> is not a <see cref="T:System.Tuple`1" /> object.</exception>
        [__DynamicallyInvokable]
        int IStructuralComparable.CompareTo(object other, IComparer comparer)
        {
            if (other == null)
            {
                return 1;
            }
            Tuple<T1> tuple = other as Tuple<T1>;
            if (tuple == null)
            {
                throw new ArgumentException("ArgumentException_TupleIncorrectType");
            }
            return comparer.Compare(this.m_Item1, tuple.m_Item1);
        }
        /// <summary>Returns the hash code for the current <see cref="T:System.Tuple`1" /> object.</summary>
        /// <returns>A 32-bit signed integer hash code.</returns>
        [__DynamicallyInvokable]
        public override int GetHashCode()
        {
            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
        }
        /// <summary>Calculates the hash code for the current <see cref="T:System.Tuple`1" /> object by using a specified computation method.</summary>
        /// <returns>A 32-bit signed integer hash code.</returns>
        /// <param name="comparer">An object whose <see cref="M:System.Collections.IEqualityComparer.GetHashCode(System.Object)" />  method calculates the hash code of the current <see cref="T:System.Tuple`1" /> object.</param>
        [__DynamicallyInvokable]
        int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
        {
            return comparer.GetHashCode(this.m_Item1);
        }
        int ITuple.GetHashCode(IEqualityComparer comparer)
        {
            return ((IStructuralEquatable)this).GetHashCode(comparer);
        }
        /// <summary>Returns a string that represents the value of this <see cref="T:System.Tuple`1" /> instance.</summary>
        /// <returns>The string representation of this <see cref="T:System.Tuple`1" /> object.</returns>
        [__DynamicallyInvokable]
        public override string ToString()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("(");
            return ((ITuple)this).ToString(stringBuilder);
        }
        string ITuple.ToString(StringBuilder sb)
        {
            sb.Append(this.m_Item1);
            sb.Append(")");
            return sb.ToString();
        }
    }
    /// <summary>Represents a 2-tuple, or pair. </summary>
    /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
    /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
    /// <filterpriority>2</filterpriority>
    [__DynamicallyInvokable]
    [Serializable]
    public class Tuple<T1, T2> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
    {
        private readonly T1 m_Item1;
        private readonly T2 m_Item2;
        /// <summary>Gets the value of the current <see cref="T:System.Tuple`2" /> object's first component.</summary>
        /// <returns>The value of the current <see cref="T:System.Tuple`2" /> object's first component.</returns>
        [__DynamicallyInvokable]
        public T1 Item1
        {
            [__DynamicallyInvokable]
            get
            {
                return this.m_Item1;
            }
        }
        /// <summary>Gets the value of the current <see cref="T:System.Tuple`2" /> object's second component.</summary>
        /// <returns>The value of the current <see cref="T:System.Tuple`2" /> object's second component.</returns>
        [__DynamicallyInvokable]
        public T2 Item2
        {
            [__DynamicallyInvokable]
            get
            {
                return this.m_Item2;
            }
        }
        int ITuple.Size
        {
            get
            {
                return 2;
            }
        }
        /// <summary>Initializes a new instance of the <see cref="T:System.Tuple`2" /> class.</summary>
        /// <param name="item1">The value of the tuple's first component.</param>
        /// <param name="item2">The value of the tuple's second component.</param>
        [__DynamicallyInvokable]
        public Tuple(T1 item1, T2 item2)
        {
            this.m_Item1 = item1;
            this.m_Item2 = item2;
        }
        /// <summary>Returns a value that indicates whether the current <see cref="T:System.Tuple`2" /> object is equal to a specified object.</summary>
        /// <returns>true if the current instance is equal to the specified object; otherwise, false.</returns>
        /// <param name="obj">The object to compare with this instance.</param>
        [__DynamicallyInvokable]
        public override bool Equals(object obj)
        {
            return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
        }
        /// <summary>Returns a value that indicates whether the current <see cref="T:System.Tuple`2" /> object is equal to a specified object based on a specified comparison method.</summary>
        /// <returns>true if the current instance is equal to the specified object; otherwise, false.</returns>
        /// <param name="other">The object to compare with this instance.</param>
        /// <param name="comparer">An object that defines the method to use to evaluate whether the two objects are equal.</param>
        [__DynamicallyInvokable]
        bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
        {
            if (other == null)
            {
                return false;
            }
            Tuple<T1, T2> tuple = other as Tuple<T1, T2>;
            return tuple != null && comparer.Equals(this.m_Item1, tuple.m_Item1) && comparer.Equals(this.m_Item2, tuple.m_Item2);
        }
        /// <summary>Compares the current <see cref="T:System.Tuple`2" /> object to a specified object and returns an integer that indicates whether the current object is before, after, or in the same position as the specified object in the sort order.</summary>
        /// <returns>A signed integer that indicates the relative position of this instance and <paramref name="obj" /> in the sort order, as shown in the following table.ValueDescriptionA negative integerThis instance precedes <paramref name="obj" />.ZeroThis instance and <paramref name="obj" /> have the same position in the sort order.A positive integerThis instance follows <paramref name="obj" />.</returns>
        /// <param name="obj">An object to compare with the current instance.</param>
        /// <exception cref="T:System.ArgumentException">
        ///   <paramref name="obj" /> is not a <see cref="T:System.Tuple`2" /> object.</exception>
        [__DynamicallyInvokable]
        int IComparable.CompareTo(object obj)
        {
            return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
        }
        /// <summary>Compares the current <see cref="T:System.Tuple`2" /> object to a specified object by using a specified comparer, and returns an integer that indicates whether the current object is before, after, or in the same position as the specified object in the sort order.</summary>
        /// <returns>A signed integer that indicates the relative position of this instance and <paramref name="other" /> in the sort order, as shown in the following table.ValueDescriptionA negative integerThis instance precedes <paramref name="other" />.ZeroThis instance and <paramref name="other" /> have the same position in the sort order.A positive integerThis instance follows <paramref name="other" />.</returns>
        /// <param name="other">An object to compare with the current instance.</param>
        /// <param name="comparer">An object that provides custom rules for comparison.</param>
        /// <exception cref="T:System.ArgumentException">
        ///   <paramref name="other" /> is not a <see cref="T:System.Tuple`2" /> object.</exception>
        [__DynamicallyInvokable]
        int IStructuralComparable.CompareTo(object other, IComparer comparer)
        {
            if (other == null)
            {
                return 1;
            }
            Tuple<T1, T2> tuple = other as Tuple<T1, T2>;
            if (tuple == null)
            {
                throw new ArgumentException("ArgumentException_TupleIncorrectType");
            }
            int num = comparer.Compare(this.m_Item1, tuple.m_Item1);
            if (num != 0)
            {
                return num;
            }
            return comparer.Compare(this.m_Item2, tuple.m_Item2);
        }
        /// <summary>Returns the hash code for the current <see cref="T:System.Tuple`2" /> object.</summary>
        /// <returns>A 32-bit signed integer hash code.</returns>
        [__DynamicallyInvokable]
        public override int GetHashCode()
        {
            return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
        }
        /// <summary>Calculates the hash code for the current <see cref="T:System.Tuple`2" /> object by using a specified computation method.</summary>
        /// <returns>A 32-bit signed integer hash code.</returns>
        /// <param name="comparer">An object whose <see cref="M:System.Collections.IEqualityComparer.GetHashCode(System.Object)" />  method calculates the hash code of the current <see cref="T:System.Tuple`2" /> object.</param>
        [__DynamicallyInvokable]
        int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
        {
            return Tuple.CombineHashCodes(comparer.GetHashCode(this.m_Item1), comparer.GetHashCode(this.m_Item2));
        }
        int ITuple.GetHashCode(IEqualityComparer comparer)
        {
            return ((IStructuralEquatable)this).GetHashCode(comparer);
        }
        /// <summary>Returns a string that represents the value of this <see cref="T:System.Tuple`2" /> instance.</summary>
        /// <returns>The string representation of this <see cref="T:System.Tuple`2" /> object.</returns>
        [__DynamicallyInvokable]
        public override string ToString()
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("(");
            return ((ITuple)this).ToString(stringBuilder);
        }
        string ITuple.ToString(StringBuilder sb)
        {
            sb.Append(this.m_Item1);
            sb.Append(", ");
            sb.Append(this.m_Item2);
            sb.Append(")");
            return sb.ToString();
        }
    }
    /// <summary>Represents a 3-tuple, or triple. </summary>
    /// <typeparam name="T1">The type of the tuple's first component.</typeparam>
    /// <typeparam name="T2">The type of the tuple's second component.</typeparam>
    /// <typeparam name="T3">The type of the tuple's third component.</typeparam>
    /// <filterpriority>2</filterpriority>
    [__DynamicallyInvokable]
    [Serializable]
    public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
    {
        private readonly T1 m_Item1;
        private readonly T2 m_Item2;
        private readonly T3 m_Item3;
        /// <summary>Gets the value of the current <see cref="T:System.Tuple`3" /> object's first component.</summary>
        /// <returns>The value of the current <see cref="T:System.Tuple`3" /> object's first component.</returns>
        [__DynamicallyInvokable]
        public T1 Item1
        {
            [__DynamicallyInvokable]
            get
            {
                return this.m_Item1;
            }
        }
        /// <summary>Gets the value of the current <see cref="T:System.Tuple`3" /> object's second component.</summary>
        /// <returns>The value of the current <see cref="T:System.Tuple`3" /> object's second component.</returns>
        [__DynamicallyInvokable]
        public T2 Item2
        {
            [__DynamicallyInvokable]
            get
            {
                return this.m_Item2;
            }
        }

Lines 1–500 of 1808.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t