You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

53 lines
1.5 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Net3_Proxy
{
public static class Tuple
{
public static Tuple<T1, T2> Create<T1, T2>(T1 i1, T2 i2)
=> new Tuple<T1, T2>(i1, i2);
internal static int CombineHashCodes(int h1, int h2)
{
return (h1 << 5) + h1 ^ h2;
}
}
[Serializable]
public class Tuple<T1, T2> : IComparable
{
public T1 Item1 { get; private set; }
public T2 Item2 { get; private set; }
public Tuple(T1 item1, T2 item2)
{
Item1 = item1;
Item2 = item2;
}
public override bool Equals(object obj)
=> obj is Tuple<T1, T2> tup
&& Equals(Item1, tup.Item1)
&& Equals(Item2, tup.Item2);
int IComparable.CompareTo(object obj)
{
if (obj == null) return 1;
var tup = obj as Tuple<T1, T2>;
if (tup == null) throw new ArgumentException($"Argument must be of type {GetType()}.", "other");
int num = Comparer<T1>.Default.Compare(Item1, tup.Item1);
if (num != 0) return num;
return Comparer<T2>.Default.Compare(Item2, tup.Item2);
}
public override int GetHashCode() =>
Tuple.CombineHashCodes(EqualityComparer<T1>.Default.GetHashCode(Item1), EqualityComparer<T2>.Default.GetHashCode(Item2));
public override string ToString() =>
$"({Item1}, {Item2})";
}
}