diff --git a/src/dotnetCampus.LatestCSharpFeatures/ValueTuple/TupleElementNamesAttribute.cs b/src/dotnetCampus.LatestCSharpFeatures/ValueTuple/TupleElementNamesAttribute.cs
deleted file mode 100644
index 2a56706..0000000
--- a/src/dotnetCampus.LatestCSharpFeatures/ValueTuple/TupleElementNamesAttribute.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-#if NETSTANDARD2_0_OR_GREATER || NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0_OR_GREATER
-#else
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Runtime.CompilerServices
-{
- using System.Collections.Generic;
-
- ///
- /// Indicates that the use of on a member is meant to be treated as a tuple with element names.
- ///
- [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue | AttributeTargets.Class | AttributeTargets.Struct )]
- public sealed class TupleElementNamesAttribute : Attribute
- {
- private readonly string[] _transformNames;
-
- ///
- /// Initializes a new instance of the class.
- ///
- ///
- /// Specifies, in a prefix traversal of a type's
- /// construction, which occurrences are meant to
- /// carry element names.
- ///
- ///
- /// This constructor is meant to be used on types that are built on an underlying
- /// occurrence of that is meant to carry element names.
- /// For instance, if C is a generic type with two type parameters, then a
- /// use of the constructed type C{,
- /// might be intended to treat the first type argument as a tuple with element names
- /// and the second as a tuple without element names. In which case, the appropriate attribute
- /// specification should use transformNames value of { "name1", "name2", null }.
- ///
- public TupleElementNamesAttribute(string[] transformNames)
- {
- if (transformNames == null)
- {
- throw new ArgumentNullException(nameof(transformNames));
- }
-
- _transformNames = transformNames;
- }
-
- ///
- /// Initializes a new instance of the class.
- ///
- ///
- /// When is created with this constructor,
- /// it can be omitted instead.
- ///
- public TupleElementNamesAttribute()
- {
- _transformNames = new string[] { };
- }
-
- ///
- /// Specifies, in a prefix traversal of a type's
- /// construction, which occurrences are meant to
- /// carry element names.
- ///
- public IList TransformNames => _transformNames;
- }
-}
-#endif
diff --git a/src/dotnetCampus.LatestCSharpFeatures/ValueTuple/ValueTuple.cs b/src/dotnetCampus.LatestCSharpFeatures/ValueTuple/ValueTuple.cs
deleted file mode 100644
index 5840c25..0000000
--- a/src/dotnetCampus.LatestCSharpFeatures/ValueTuple/ValueTuple.cs
+++ /dev/null
@@ -1,2365 +0,0 @@
-#pragma warning disable CS8600
-#pragma warning disable CS8603
-
-#if NETCOREAPP3_0 || NETCOREAPP3_1 || NET5_0_OR_GREATER || NETSTANDARD2_0_OR_GREATER || NET47 || NET471 || NET472 || NET48 || NET481
-#else
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-namespace System.Numerics.Hashing
-{
- internal static class HashHelpers
- {
- public static readonly int RandomSeed = new Random().Next(Int32.MinValue, Int32.MaxValue);
-
- public static int Combine(int h1, int h2)
- {
- // RyuJIT optimizes this to use the ROL instruction
- // Related GitHub pull request: dotnet/coreclr#1830
- uint rol5 = ((uint)h1 << 5) | ((uint)h1 >> 27);
- return ((int)rol5 + h1) ^ h2;
- }
- }
-}
-
-namespace System.Runtime.CompilerServices
-{
- ///
- /// This interface is required for types that want to be indexed into by dynamic patterns.
- ///
- public interface ITuple
- {
- ///
- /// The number of positions in this data structure.
- ///
- int Length { get; }
-
- ///
- /// Get the element at position .
- ///
- object this[int index] { get; }
- }
-}
-
-namespace System
-{
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics.Contracts;
- using System.Runtime.InteropServices;
- using System.Runtime.CompilerServices;
- using HashHelpers = System.Numerics.Hashing.HashHelpers;
-
- ///
- /// Helper so we can call some tuple methods recursively without knowing the underlying types.
- ///
- internal interface IValueTupleInternal : ITuple
- {
- int GetHashCode(IEqualityComparer comparer);
- string ToStringEnd();
- }
-
- ///
- /// The ValueTuple types (from arity 0 to 8) comprise the runtime implementation that underlies tuples in C# and struct tuples in F#.
- /// Aside from created via language syntax, they are most easily created via the ValueTuple.Create factory methods.
- /// The System.ValueTuple types differ from the System.Tuple types in that:
- /// - they are structs rather than classes,
- /// - they are mutable rather than readonly, and
- /// - their members (such as Item1, Item2, etc) are fields rather than properties.
- ///
- [Serializable]
- public struct ValueTuple
- : IEquatable, IStructuralEquatable, IStructuralComparable, IComparable, IComparable, IValueTupleInternal, ITuple
- {
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if is a .
- public override bool Equals(object obj)
- {
- return obj is ValueTuple;
- }
-
- /// Returns a value indicating whether this instance is equal to a specified value.
- /// An instance to compare to this instance.
- /// true if has the same value as this instance; otherwise, false.
- public bool Equals(ValueTuple other)
- {
- return true;
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- return other is ValueTuple;
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return 0;
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- return 0;
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return 0;
- }
-
- /// Returns the hash code for this instance.
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return 0;
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return 0;
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return 0;
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form ().
- ///
- public override string ToString()
- {
- return "()";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 0;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- throw new IndexOutOfRangeException();
- }
- }
-
- /// Creates a new struct 0-tuple.
- /// A 0-tuple.
- public static ValueTuple Create() =>
- new ValueTuple();
-
- /// Creates a new struct 1-tuple, or singleton.
- /// The type of the first component of the tuple.
- /// The value of the first component of the tuple.
- /// A 1-tuple (singleton) whose value is (item1).
- public static ValueTuple Create(T1 item1) =>
- new ValueTuple(item1);
-
- /// Creates a new struct 2-tuple, or pair.
- /// The type of the first component of the tuple.
- /// The type of the second component of the tuple.
- /// The value of the first component of the tuple.
- /// The value of the second component of the tuple.
- /// A 2-tuple (pair) whose value is (item1, item2).
- public static ValueTuple Create(T1 item1, T2 item2) =>
- new ValueTuple(item1, item2);
-
- /// Creates a new struct 3-tuple, or triple.
- /// The type of the first component of the tuple.
- /// The type of the second component of the tuple.
- /// The type of the third component of the tuple.
- /// The value of the first component of the tuple.
- /// The value of the second component of the tuple.
- /// The value of the third component of the tuple.
- /// A 3-tuple (triple) whose value is (item1, item2, item3).
- public static ValueTuple Create(T1 item1, T2 item2, T3 item3) =>
- new ValueTuple(item1, item2, item3);
-
- /// Creates a new struct 4-tuple, or quadruple.
- /// The type of the first component of the tuple.
- /// The type of the second component of the tuple.
- /// The type of the third component of the tuple.
- /// The type of the fourth component of the tuple.
- /// The value of the first component of the tuple.
- /// The value of the second component of the tuple.
- /// The value of the third component of the tuple.
- /// The value of the fourth component of the tuple.
- /// A 4-tuple (quadruple) whose value is (item1, item2, item3, item4).
- public static ValueTuple Create(T1 item1, T2 item2, T3 item3, T4 item4) =>
- new ValueTuple(item1, item2, item3, item4);
-
- /// Creates a new struct 5-tuple, or quintuple.
- /// The type of the first component of the tuple.
- /// The type of the second component of the tuple.
- /// The type of the third component of the tuple.
- /// The type of the fourth component of the tuple.
- /// The type of the fifth component of the tuple.
- /// The value of the first component of the tuple.
- /// The value of the second component of the tuple.
- /// The value of the third component of the tuple.
- /// The value of the fourth component of the tuple.
- /// The value of the fifth component of the tuple.
- /// A 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5).
- public static ValueTuple Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) =>
- new ValueTuple(item1, item2, item3, item4, item5);
-
- /// Creates a new struct 6-tuple, or sextuple.
- /// The type of the first component of the tuple.
- /// The type of the second component of the tuple.
- /// The type of the third component of the tuple.
- /// The type of the fourth component of the tuple.
- /// The type of the fifth component of the tuple.
- /// The type of the sixth component of the tuple.
- /// The value of the first component of the tuple.
- /// The value of the second component of the tuple.
- /// The value of the third component of the tuple.
- /// The value of the fourth component of the tuple.
- /// The value of the fifth component of the tuple.
- /// The value of the sixth component of the tuple.
- /// A 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6).
- public static ValueTuple Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) =>
- new ValueTuple(item1, item2, item3, item4, item5, item6);
-
- /// Creates a new struct 7-tuple, or septuple.
- /// The type of the first component of the tuple.
- /// The type of the second component of the tuple.
- /// The type of the third component of the tuple.
- /// The type of the fourth component of the tuple.
- /// The type of the fifth component of the tuple.
- /// The type of the sixth component of the tuple.
- /// The type of the seventh component of the tuple.
- /// The value of the first component of the tuple.
- /// The value of the second component of the tuple.
- /// The value of the third component of the tuple.
- /// The value of the fourth component of the tuple.
- /// The value of the fifth component of the tuple.
- /// The value of the sixth component of the tuple.
- /// The value of the seventh component of the tuple.
- /// A 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7).
- public static ValueTuple Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) =>
- new ValueTuple(item1, item2, item3, item4, item5, item6, item7);
-
- /// Creates a new struct 8-tuple, or octuple.
- /// The type of the first component of the tuple.
- /// The type of the second component of the tuple.
- /// The type of the third component of the tuple.
- /// The type of the fourth component of the tuple.
- /// The type of the fifth component of the tuple.
- /// The type of the sixth component of the tuple.
- /// The type of the seventh component of the tuple.
- /// The type of the eighth component of the tuple.
- /// The value of the first component of the tuple.
- /// The value of the second component of the tuple.
- /// The value of the third component of the tuple.
- /// The value of the fourth component of the tuple.
- /// The value of the fifth component of the tuple.
- /// The value of the sixth component of the tuple.
- /// The value of the seventh component of the tuple.
- /// The value of the eighth component of the tuple.
- /// An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8).
- public static ValueTuple> Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) =>
- new ValueTuple>(item1, item2, item3, item4, item5, item6, item7, ValueTuple.Create(item8));
-
- internal static int CombineHashCodes(int h1, int h2)
- {
- return HashHelpers.Combine(HashHelpers.Combine(HashHelpers.RandomSeed, h1), h2);
- }
-
- internal static int CombineHashCodes(int h1, int h2, int h3)
- {
- return HashHelpers.Combine(CombineHashCodes(h1, h2), h3);
- }
-
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4)
- {
- return HashHelpers.Combine(CombineHashCodes(h1, h2, h3), h4);
- }
-
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5)
- {
- return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4), h5);
- }
-
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6)
- {
- return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4, h5), h6);
- }
-
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7)
- {
- return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4, h5, h6), h7);
- }
-
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8)
- {
- return HashHelpers.Combine(CombineHashCodes(h1, h2, h3, h4, h5, h6, h7), h8);
- }
- }
-
- /// Represents a 1-tuple, or singleton, as a value type.
- /// The type of the tuple's only component.
- [Serializable]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- public ValueTuple(T1 item1)
- {
- Item1 = item1;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current
- /// instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its field
- /// is equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1);
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- return Comparer.Default.Compare(Item1, objTuple.Item1);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- return Comparer.Default.Compare(Item1, other.Item1);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Compare(Item1, objTuple.Item1);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return Item1?.GetHashCode() ?? 0;
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return comparer.GetHashCode(Item1);
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return comparer.GetHashCode(Item1);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1),
- /// where Item1 represents the value of . If the field is ,
- /// it is represented as .
- ///
- public override string ToString()
- {
- return "(" + Item1?.ToString() + ")";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return Item1?.ToString() + ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 1;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- if (index != 0)
- {
- throw new IndexOutOfRangeException();
- }
- return Item1;
- }
- }
- }
-
- ///
- /// Represents a 2-tuple, or pair, as a value type.
- ///
- /// The type of the tuple's first component.
- /// The type of the tuple's second component.
- [Serializable]
- [StructLayout(LayoutKind.Auto)]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
-
- ///
- /// The current instance's first component.
- ///
- public T2 Item2;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- /// The value of the tuple's second component.
- public ValueTuple(T1 item1, T2 item2)
- {
- Item1 = item1;
- Item2 = item2;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its fields
- /// are equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1)
- && EqualityComparer.Default.Equals(Item2, other.Item2);
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object based on a specified comparison method.
- ///
- /// The object to compare with this instance.
- /// An object that defines the method to use to evaluate whether the two objects are equal.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- ///
- /// This member is an explicit interface member implementation. It can be used only when the
- /// instance is cast to an interface.
- ///
- /// The implementation is called only if other is not ,
- /// and if it can be successfully cast (in C#) or converted (in Visual Basic) to a
- /// whose components are of the same types as those of the current instance. The IStructuralEquatable.Equals(Object, IEqualityComparer) method
- /// first passes the values of the objects to be compared to the
- /// implementation. If this method call returns , the method is
- /// called again and passed the values of the two instances.
- ///
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1)
- && comparer.Equals(Item2, objTuple.Item2);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return CompareTo((ValueTuple)other);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- int c = Comparer.Default.Compare(Item1, other.Item1);
- if (c != 0) return c;
-
- return Comparer.Default.Compare(Item2, other.Item2);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- int c = comparer.Compare(Item1, objTuple.Item1);
- if (c != 0) return c;
-
- return comparer.Compare(Item2, objTuple.Item2);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0);
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- private int GetHashCodeCore(IEqualityComparer comparer)
- {
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
- comparer.GetHashCode(Item2));
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1, Item2),
- /// where Item1 and Item2 represent the values of the
- /// and fields. If either field value is ,
- /// it is represented as .
- ///
- public override string ToString()
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ")";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 2;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- switch (index)
- {
- case 0:
- return Item1;
- case 1:
- return Item2;
- default:
- throw new IndexOutOfRangeException();
- }
- }
- }
- }
-
- ///
- /// Represents a 3-tuple, or triple, as a value type.
- ///
- /// The type of the tuple's first component.
- /// The type of the tuple's second component.
- /// The type of the tuple's third component.
- [Serializable]
- [StructLayout(LayoutKind.Auto)]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
- ///
- /// The current instance's second component.
- ///
- public T2 Item2;
- ///
- /// The current instance's third component.
- ///
- public T3 Item3;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- /// The value of the tuple's second component.
- /// The value of the tuple's third component.
- public ValueTuple(T1 item1, T2 item2, T3 item3)
- {
- Item1 = item1;
- Item2 = item2;
- Item3 = item3;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current
- /// instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its fields
- /// are equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1)
- && EqualityComparer.Default.Equals(Item2, other.Item2)
- && EqualityComparer.Default.Equals(Item3, other.Item3);
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1)
- && comparer.Equals(Item2, objTuple.Item2)
- && comparer.Equals(Item3, objTuple.Item3);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return CompareTo((ValueTuple)other);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- int c = Comparer.Default.Compare(Item1, other.Item1);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item2, other.Item2);
- if (c != 0) return c;
-
- return Comparer.Default.Compare(Item3, other.Item3);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- int c = comparer.Compare(Item1, objTuple.Item1);
- if (c != 0) return c;
-
- c = comparer.Compare(Item2, objTuple.Item2);
- if (c != 0) return c;
-
- return comparer.Compare(Item3, objTuple.Item3);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0);
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- private int GetHashCodeCore(IEqualityComparer comparer)
- {
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
- comparer.GetHashCode(Item2),
- comparer.GetHashCode(Item3));
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1, Item2, Item3).
- /// If any field value is , it is represented as .
- ///
- public override string ToString()
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ")";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 3;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- switch (index)
- {
- case 0:
- return Item1;
- case 1:
- return Item2;
- case 2:
- return Item3;
- default:
- throw new IndexOutOfRangeException();
- }
- }
- }
- }
-
- ///
- /// Represents a 4-tuple, or quadruple, as a value type.
- ///
- /// The type of the tuple's first component.
- /// The type of the tuple's second component.
- /// The type of the tuple's third component.
- /// The type of the tuple's fourth component.
- [Serializable]
- [StructLayout(LayoutKind.Auto)]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
- ///
- /// The current instance's second component.
- ///
- public T2 Item2;
- ///
- /// The current instance's third component.
- ///
- public T3 Item3;
- ///
- /// The current instance's fourth component.
- ///
- public T4 Item4;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- /// The value of the tuple's second component.
- /// The value of the tuple's third component.
- /// The value of the tuple's fourth component.
- public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4)
- {
- Item1 = item1;
- Item2 = item2;
- Item3 = item3;
- Item4 = item4;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current
- /// instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its fields
- /// are equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1)
- && EqualityComparer.Default.Equals(Item2, other.Item2)
- && EqualityComparer.Default.Equals(Item3, other.Item3)
- && EqualityComparer.Default.Equals(Item4, other.Item4);
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1)
- && comparer.Equals(Item2, objTuple.Item2)
- && comparer.Equals(Item3, objTuple.Item3)
- && comparer.Equals(Item4, objTuple.Item4);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return CompareTo((ValueTuple)other);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- int c = Comparer.Default.Compare(Item1, other.Item1);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item2, other.Item2);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item3, other.Item3);
- if (c != 0) return c;
-
- return Comparer.Default.Compare(Item4, other.Item4);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- int c = comparer.Compare(Item1, objTuple.Item1);
- if (c != 0) return c;
-
- c = comparer.Compare(Item2, objTuple.Item2);
- if (c != 0) return c;
-
- c = comparer.Compare(Item3, objTuple.Item3);
- if (c != 0) return c;
-
- return comparer.Compare(Item4, objTuple.Item4);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0);
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- private int GetHashCodeCore(IEqualityComparer comparer)
- {
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
- comparer.GetHashCode(Item2),
- comparer.GetHashCode(Item3),
- comparer.GetHashCode(Item4));
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1, Item2, Item3, Item4).
- /// If any field value is , it is represented as .
- ///
- public override string ToString()
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ")";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 4;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- switch (index)
- {
- case 0:
- return Item1;
- case 1:
- return Item2;
- case 2:
- return Item3;
- case 3:
- return Item4;
- default:
- throw new IndexOutOfRangeException();
- }
- }
- }
- }
-
- ///
- /// Represents a 5-tuple, or quintuple, as a value type.
- ///
- /// The type of the tuple's first component.
- /// The type of the tuple's second component.
- /// The type of the tuple's third component.
- /// The type of the tuple's fourth component.
- /// The type of the tuple's fifth component.
- [Serializable]
- [StructLayout(LayoutKind.Auto)]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
- ///
- /// The current instance's second component.
- ///
- public T2 Item2;
- ///
- /// The current instance's third component.
- ///
- public T3 Item3;
- ///
- /// The current instance's fourth component.
- ///
- public T4 Item4;
- ///
- /// The current instance's fifth component.
- ///
- public T5 Item5;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- /// The value of the tuple's second component.
- /// The value of the tuple's third component.
- /// The value of the tuple's fourth component.
- /// The value of the tuple's fifth component.
- public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
- {
- Item1 = item1;
- Item2 = item2;
- Item3 = item3;
- Item4 = item4;
- Item5 = item5;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current
- /// instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its fields
- /// are equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1)
- && EqualityComparer.Default.Equals(Item2, other.Item2)
- && EqualityComparer.Default.Equals(Item3, other.Item3)
- && EqualityComparer.Default.Equals(Item4, other.Item4)
- && EqualityComparer.Default.Equals(Item5, other.Item5);
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1)
- && comparer.Equals(Item2, objTuple.Item2)
- && comparer.Equals(Item3, objTuple.Item3)
- && comparer.Equals(Item4, objTuple.Item4)
- && comparer.Equals(Item5, objTuple.Item5);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return CompareTo((ValueTuple)other);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- int c = Comparer.Default.Compare(Item1, other.Item1);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item2, other.Item2);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item3, other.Item3);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item4, other.Item4);
- if (c != 0) return c;
-
- return Comparer.Default.Compare(Item5, other.Item5);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- int c = comparer.Compare(Item1, objTuple.Item1);
- if (c != 0) return c;
-
- c = comparer.Compare(Item2, objTuple.Item2);
- if (c != 0) return c;
-
- c = comparer.Compare(Item3, objTuple.Item3);
- if (c != 0) return c;
-
- c = comparer.Compare(Item4, objTuple.Item4);
- if (c != 0) return c;
-
- return comparer.Compare(Item5, objTuple.Item5);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0);
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- private int GetHashCodeCore(IEqualityComparer comparer)
- {
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
- comparer.GetHashCode(Item2),
- comparer.GetHashCode(Item3),
- comparer.GetHashCode(Item4),
- comparer.GetHashCode(Item5));
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5).
- /// If any field value is , it is represented as .
- ///
- public override string ToString()
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ")";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 5;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- switch (index)
- {
- case 0:
- return Item1;
- case 1:
- return Item2;
- case 2:
- return Item3;
- case 3:
- return Item4;
- case 4:
- return Item5;
- default:
- throw new IndexOutOfRangeException();
- }
- }
- }
- }
-
- ///
- /// Represents a 6-tuple, or sixtuple, as a value type.
- ///
- /// The type of the tuple's first component.
- /// The type of the tuple's second component.
- /// The type of the tuple's third component.
- /// The type of the tuple's fourth component.
- /// The type of the tuple's fifth component.
- /// The type of the tuple's sixth component.
- [Serializable]
- [StructLayout(LayoutKind.Auto)]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
- ///
- /// The current instance's second component.
- ///
- public T2 Item2;
- ///
- /// The current instance's third component.
- ///
- public T3 Item3;
- ///
- /// The current instance's fourth component.
- ///
- public T4 Item4;
- ///
- /// The current instance's fifth component.
- ///
- public T5 Item5;
- ///
- /// The current instance's sixth component.
- ///
- public T6 Item6;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- /// The value of the tuple's second component.
- /// The value of the tuple's third component.
- /// The value of the tuple's fourth component.
- /// The value of the tuple's fifth component.
- /// The value of the tuple's sixth component.
- public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
- {
- Item1 = item1;
- Item2 = item2;
- Item3 = item3;
- Item4 = item4;
- Item5 = item5;
- Item6 = item6;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current
- /// instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its fields
- /// are equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1)
- && EqualityComparer.Default.Equals(Item2, other.Item2)
- && EqualityComparer.Default.Equals(Item3, other.Item3)
- && EqualityComparer.Default.Equals(Item4, other.Item4)
- && EqualityComparer.Default.Equals(Item5, other.Item5)
- && EqualityComparer.Default.Equals(Item6, other.Item6);
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1)
- && comparer.Equals(Item2, objTuple.Item2)
- && comparer.Equals(Item3, objTuple.Item3)
- && comparer.Equals(Item4, objTuple.Item4)
- && comparer.Equals(Item5, objTuple.Item5)
- && comparer.Equals(Item6, objTuple.Item6);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return CompareTo((ValueTuple)other);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- int c = Comparer.Default.Compare(Item1, other.Item1);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item2, other.Item2);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item3, other.Item3);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item4, other.Item4);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item5, other.Item5);
- if (c != 0) return c;
-
- return Comparer.Default.Compare(Item6, other.Item6);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- int c = comparer.Compare(Item1, objTuple.Item1);
- if (c != 0) return c;
-
- c = comparer.Compare(Item2, objTuple.Item2);
- if (c != 0) return c;
-
- c = comparer.Compare(Item3, objTuple.Item3);
- if (c != 0) return c;
-
- c = comparer.Compare(Item4, objTuple.Item4);
- if (c != 0) return c;
-
- c = comparer.Compare(Item5, objTuple.Item5);
- if (c != 0) return c;
-
- return comparer.Compare(Item6, objTuple.Item6);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0);
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- private int GetHashCodeCore(IEqualityComparer comparer)
- {
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
- comparer.GetHashCode(Item2),
- comparer.GetHashCode(Item3),
- comparer.GetHashCode(Item4),
- comparer.GetHashCode(Item5),
- comparer.GetHashCode(Item6));
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6).
- /// If any field value is , it is represented as .
- ///
- public override string ToString()
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ")";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 6;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- switch (index)
- {
- case 0:
- return Item1;
- case 1:
- return Item2;
- case 2:
- return Item3;
- case 3:
- return Item4;
- case 4:
- return Item5;
- case 5:
- return Item6;
- default:
- throw new IndexOutOfRangeException();
- }
- }
- }
- }
-
- ///
- /// Represents a 7-tuple, or sentuple, as a value type.
- ///
- /// The type of the tuple's first component.
- /// The type of the tuple's second component.
- /// The type of the tuple's third component.
- /// The type of the tuple's fourth component.
- /// The type of the tuple's fifth component.
- /// The type of the tuple's sixth component.
- /// The type of the tuple's seventh component.
- [Serializable]
- [StructLayout(LayoutKind.Auto)]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
- ///
- /// The current instance's second component.
- ///
- public T2 Item2;
- ///
- /// The current instance's third component.
- ///
- public T3 Item3;
- ///
- /// The current instance's fourth component.
- ///
- public T4 Item4;
- ///
- /// The current instance's fifth component.
- ///
- public T5 Item5;
- ///
- /// The current instance's sixth component.
- ///
- public T6 Item6;
- ///
- /// The current instance's seventh component.
- ///
- public T7 Item7;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- /// The value of the tuple's second component.
- /// The value of the tuple's third component.
- /// The value of the tuple's fourth component.
- /// The value of the tuple's fifth component.
- /// The value of the tuple's sixth component.
- /// The value of the tuple's seventh component.
- public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
- {
- Item1 = item1;
- Item2 = item2;
- Item3 = item3;
- Item4 = item4;
- Item5 = item5;
- Item6 = item6;
- Item7 = item7;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current
- /// instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its fields
- /// are equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1)
- && EqualityComparer.Default.Equals(Item2, other.Item2)
- && EqualityComparer.Default.Equals(Item3, other.Item3)
- && EqualityComparer.Default.Equals(Item4, other.Item4)
- && EqualityComparer.Default.Equals(Item5, other.Item5)
- && EqualityComparer.Default.Equals(Item6, other.Item6)
- && EqualityComparer.Default.Equals(Item7, other.Item7);
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1)
- && comparer.Equals(Item2, objTuple.Item2)
- && comparer.Equals(Item3, objTuple.Item3)
- && comparer.Equals(Item4, objTuple.Item4)
- && comparer.Equals(Item5, objTuple.Item5)
- && comparer.Equals(Item6, objTuple.Item6)
- && comparer.Equals(Item7, objTuple.Item7);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return CompareTo((ValueTuple)other);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- int c = Comparer.Default.Compare(Item1, other.Item1);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item2, other.Item2);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item3, other.Item3);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item4, other.Item4);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item5, other.Item5);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item6, other.Item6);
- if (c != 0) return c;
-
- return Comparer.Default.Compare(Item7, other.Item7);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- int c = comparer.Compare(Item1, objTuple.Item1);
- if (c != 0) return c;
-
- c = comparer.Compare(Item2, objTuple.Item2);
- if (c != 0) return c;
-
- c = comparer.Compare(Item3, objTuple.Item3);
- if (c != 0) return c;
-
- c = comparer.Compare(Item4, objTuple.Item4);
- if (c != 0) return c;
-
- c = comparer.Compare(Item5, objTuple.Item5);
- if (c != 0) return c;
-
- c = comparer.Compare(Item6, objTuple.Item6);
- if (c != 0) return c;
-
- return comparer.Compare(Item7, objTuple.Item7);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0);
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- private int GetHashCodeCore(IEqualityComparer comparer)
- {
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1),
- comparer.GetHashCode(Item2),
- comparer.GetHashCode(Item3),
- comparer.GetHashCode(Item4),
- comparer.GetHashCode(Item5),
- comparer.GetHashCode(Item6),
- comparer.GetHashCode(Item7));
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7).
- /// If any field value is , it is represented as .
- ///
- public override string ToString()
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ")";
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ")";
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length => 7;
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- switch (index)
- {
- case 0:
- return Item1;
- case 1:
- return Item2;
- case 2:
- return Item3;
- case 3:
- return Item4;
- case 4:
- return Item5;
- case 5:
- return Item6;
- case 6:
- return Item7;
- default:
- throw new IndexOutOfRangeException();
- }
- }
- }
- }
-
- ///
- /// Represents an 8-tuple, or octuple, as a value type.
- ///
- /// The type of the tuple's first component.
- /// The type of the tuple's second component.
- /// The type of the tuple's third component.
- /// The type of the tuple's fourth component.
- /// The type of the tuple's fifth component.
- /// The type of the tuple's sixth component.
- /// The type of the tuple's seventh component.
- /// The type of the tuple's eighth component.
- [Serializable]
- [StructLayout(LayoutKind.Auto)]
- public struct ValueTuple
- : IEquatable>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable>, IValueTupleInternal, ITuple
- where TRest : struct
- {
- ///
- /// The current instance's first component.
- ///
- public T1 Item1;
- ///
- /// The current instance's second component.
- ///
- public T2 Item2;
- ///
- /// The current instance's third component.
- ///
- public T3 Item3;
- ///
- /// The current instance's fourth component.
- ///
- public T4 Item4;
- ///
- /// The current instance's fifth component.
- ///
- public T5 Item5;
- ///
- /// The current instance's sixth component.
- ///
- public T6 Item6;
- ///
- /// The current instance's seventh component.
- ///
- public T7 Item7;
- ///
- /// The current instance's eighth component.
- ///
- public TRest Rest;
-
- ///
- /// Initializes a new instance of the value type.
- ///
- /// The value of the tuple's first component.
- /// The value of the tuple's second component.
- /// The value of the tuple's third component.
- /// The value of the tuple's fourth component.
- /// The value of the tuple's fifth component.
- /// The value of the tuple's sixth component.
- /// The value of the tuple's seventh component.
- /// The value of the tuple's eight component.
- public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest)
- {
- if (!(rest is IValueTupleInternal))
- {
- throw new ArgumentException();
- }
-
- Item1 = item1;
- Item2 = item2;
- Item3 = item3;
- Item4 = item4;
- Item5 = item5;
- Item6 = item6;
- Item7 = item7;
- Rest = rest;
- }
-
- ///
- /// Returns a value that indicates whether the current instance is equal to a specified object.
- ///
- /// The object to compare with this instance.
- /// if the current instance is equal to the specified object; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance under the following conditions:
- ///
- /// - It is a value type.
- /// - Its components are of the same types as those of the current instance.
- /// - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
- ///
- ///
- public override bool Equals(object obj)
- {
- return obj is ValueTuple && Equals((ValueTuple)obj);
- }
-
- ///
- /// Returns a value that indicates whether the current
- /// instance is equal to a specified .
- ///
- /// The tuple to compare with this instance.
- /// if the current instance is equal to the specified tuple; otherwise, .
- ///
- /// The parameter is considered to be equal to the current instance if each of its fields
- /// are equal to that of the current instance, using the default comparer for that field's type.
- ///
- public bool Equals(ValueTuple other)
- {
- return EqualityComparer.Default.Equals(Item1, other.Item1)
- && EqualityComparer.Default.Equals(Item2, other.Item2)
- && EqualityComparer.Default.Equals(Item3, other.Item3)
- && EqualityComparer.Default.Equals(Item4, other.Item4)
- && EqualityComparer.Default.Equals(Item5, other.Item5)
- && EqualityComparer.Default.Equals(Item6, other.Item6)
- && EqualityComparer.Default.Equals(Item7, other.Item7)
- && EqualityComparer.Default.Equals(Rest, other.Rest);
- }
-
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null || !(other is ValueTuple)) return false;
-
- var objTuple = (ValueTuple)other;
-
- return comparer.Equals(Item1, objTuple.Item1)
- && comparer.Equals(Item2, objTuple.Item2)
- && comparer.Equals(Item3, objTuple.Item3)
- && comparer.Equals(Item4, objTuple.Item4)
- && comparer.Equals(Item5, objTuple.Item5)
- && comparer.Equals(Item6, objTuple.Item6)
- && comparer.Equals(Item7, objTuple.Item7)
- && comparer.Equals(Rest, objTuple.Rest);
- }
-
- int IComparable.CompareTo(object other)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- return CompareTo((ValueTuple)other);
- }
-
- /// Compares this instance to a specified instance and returns an indication of their relative values.
- /// An instance to compare.
- ///
- /// A signed number indicating the relative values of this instance and .
- /// Returns less than zero if this instance is less than , zero if this
- /// instance is equal to , and greater than zero if this instance is greater
- /// than .
- ///
- public int CompareTo(ValueTuple other)
- {
- int c = Comparer.Default.Compare(Item1, other.Item1);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item2, other.Item2);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item3, other.Item3);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item4, other.Item4);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item5, other.Item5);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item6, other.Item6);
- if (c != 0) return c;
-
- c = Comparer.Default.Compare(Item7, other.Item7);
- if (c != 0) return c;
-
- return Comparer.Default.Compare(Rest, other.Rest);
- }
-
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
-
- if (!(other is ValueTuple))
- {
- throw new ArgumentException();
- }
-
- var objTuple = (ValueTuple)other;
-
- int c = comparer.Compare(Item1, objTuple.Item1);
- if (c != 0) return c;
-
- c = comparer.Compare(Item2, objTuple.Item2);
- if (c != 0) return c;
-
- c = comparer.Compare(Item3, objTuple.Item3);
- if (c != 0) return c;
-
- c = comparer.Compare(Item4, objTuple.Item4);
- if (c != 0) return c;
-
- c = comparer.Compare(Item5, objTuple.Item5);
- if (c != 0) return c;
-
- c = comparer.Compare(Item6, objTuple.Item6);
- if (c != 0) return c;
-
- c = comparer.Compare(Item7, objTuple.Item7);
- if (c != 0) return c;
-
- return comparer.Compare(Rest, objTuple.Rest);
- }
-
- ///
- /// Returns the hash code for the current instance.
- ///
- /// A 32-bit signed integer hash code.
- public override int GetHashCode()
- {
- // We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
- IValueTupleInternal rest = Rest as IValueTupleInternal;
- if (rest == null)
- {
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0);
- }
-
- int size = rest.Length;
- if (size >= 8) { return rest.GetHashCode(); }
-
- // In this case, the rest member has less than 8 elements so we need to combine some our elements with the elements in rest
- int k = 8 - size;
- switch (k)
- {
- case 1:
- return ValueTuple.CombineHashCodes(Item7?.GetHashCode() ?? 0,
- rest.GetHashCode());
- case 2:
- return ValueTuple.CombineHashCodes(Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0,
- rest.GetHashCode());
- case 3:
- return ValueTuple.CombineHashCodes(Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0,
- rest.GetHashCode());
- case 4:
- return ValueTuple.CombineHashCodes(Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0,
- rest.GetHashCode());
- case 5:
- return ValueTuple.CombineHashCodes(Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0,
- rest.GetHashCode());
- case 6:
- return ValueTuple.CombineHashCodes(Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0,
- rest.GetHashCode());
- case 7:
- case 8:
- return ValueTuple.CombineHashCodes(Item1?.GetHashCode() ?? 0,
- Item2?.GetHashCode() ?? 0,
- Item3?.GetHashCode() ?? 0,
- Item4?.GetHashCode() ?? 0,
- Item5?.GetHashCode() ?? 0,
- Item6?.GetHashCode() ?? 0,
- Item7?.GetHashCode() ?? 0,
- rest.GetHashCode());
- }
-
- Contract.Assert(false, "Missed all cases for computing ValueTuple hash code");
- return -1;
- }
-
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- private int GetHashCodeCore(IEqualityComparer comparer)
- {
- // We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
- IValueTupleInternal rest = Rest as IValueTupleInternal;
- if (rest == null)
- {
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1), comparer.GetHashCode(Item2), comparer.GetHashCode(Item3),
- comparer.GetHashCode(Item4), comparer.GetHashCode(Item5), comparer.GetHashCode(Item6),
- comparer.GetHashCode(Item7));
- }
-
- int size = rest.Length;
- if (size >= 8) { return rest.GetHashCode(comparer); }
-
- // In this case, the rest member has less than 8 elements so we need to combine some our elements with the elements in rest
- int k = 8 - size;
- switch (k)
- {
- case 1:
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
- case 2:
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item6), comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
- case 3:
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item5), comparer.GetHashCode(Item6), comparer.GetHashCode(Item7),
- rest.GetHashCode(comparer));
- case 4:
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item4), comparer.GetHashCode(Item5), comparer.GetHashCode(Item6),
- comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
- case 5:
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item3), comparer.GetHashCode(Item4), comparer.GetHashCode(Item5),
- comparer.GetHashCode(Item6), comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
- case 6:
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item2), comparer.GetHashCode(Item3), comparer.GetHashCode(Item4),
- comparer.GetHashCode(Item5), comparer.GetHashCode(Item6), comparer.GetHashCode(Item7),
- rest.GetHashCode(comparer));
- case 7:
- case 8:
- return ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1), comparer.GetHashCode(Item2), comparer.GetHashCode(Item3),
- comparer.GetHashCode(Item4), comparer.GetHashCode(Item5), comparer.GetHashCode(Item6),
- comparer.GetHashCode(Item7), rest.GetHashCode(comparer));
- }
-
- Contract.Assert(false, "Missed all cases for computing ValueTuple hash code");
- return -1;
- }
-
- int IValueTupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return GetHashCodeCore(comparer);
- }
-
- ///
- /// Returns a string that represents the value of this instance.
- ///
- /// The string representation of this instance.
- ///
- /// The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Rest).
- /// If any field value is , it is represented as .
- ///
- public override string ToString()
- {
- IValueTupleInternal rest = Rest as IValueTupleInternal;
- if (rest == null)
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + Rest.ToString() + ")";
- }
- else
- {
- return "(" + Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + rest.ToStringEnd();
- }
- }
-
- string IValueTupleInternal.ToStringEnd()
- {
- IValueTupleInternal rest = Rest as IValueTupleInternal;
- if (rest == null)
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + Rest.ToString() + ")";
- }
- else
- {
- return Item1?.ToString() + ", " + Item2?.ToString() + ", " + Item3?.ToString() + ", " + Item4?.ToString() + ", " + Item5?.ToString() + ", " + Item6?.ToString() + ", " + Item7?.ToString() + ", " + rest.ToStringEnd();
- }
- }
-
- ///
- /// The number of positions in this data structure.
- ///
- int ITuple.Length
- {
- get
- {
- IValueTupleInternal rest = Rest as IValueTupleInternal;
- return rest == null ? 8 : 7 + rest.Length;
- }
- }
-
- ///
- /// Get the element at position .
- ///
- object ITuple.this[int index]
- {
- get
- {
- switch (index)
- {
- case 0:
- return Item1;
- case 1:
- return Item2;
- case 2:
- return Item3;
- case 3:
- return Item4;
- case 4:
- return Item5;
- case 5:
- return Item6;
- case 6:
- return Item7;
- }
-
- IValueTupleInternal rest = Rest as IValueTupleInternal;
- if (rest == null)
- {
- if (index == 7)
- {
- return Rest;
- }
- throw new IndexOutOfRangeException();
- }
- return rest[index - 7];
- }
- }
- }
-}
-#endif