internal static object GetBuiltinComparer #if !UNITY <T> #endif (Type t) { object comparer = null; if (t == typeof(Int16)) { comparer = new Int16EqualityComparer(); } else if (t == typeof(Int32)) { comparer = new Int32EqualityComparer(); } else if (t == typeof(Int64)) { comparer = new Int64EqualityComparer(); } else if (t == typeof(UInt16)) { comparer = new UInt16EqualityComparer(); } else if (t == typeof(UInt32)) { comparer = new UInt32EqualityComparer(); } else if (t == typeof(UInt64)) { comparer = new UInt64EqualityComparer(); } else if (t == typeof(Single)) { comparer = new SingleEqualityComparer(); } else if (t == typeof(Double)) { comparer = new DoubleEqualityComparer(); } else if (t == typeof(bool)) { comparer = new BoolEqualityComparer(); } else if (t == typeof(byte)) { comparer = new ByteEqualityComparer(); } else if (t == typeof(sbyte)) { comparer = new SByteEqualityComparer(); } else if (t == typeof(String)) { comparer = new StringEqualityComparer(); } else if (t == typeof(Char)) { comparer = new CharEqualityComparer(); } else if (t == typeof(TimeSpan)) { comparer = new TimeSpanEqualityComparer(); } else if (t == typeof(DateTime)) { comparer = new DeteTimeEqualityComparer(); } else if (t == typeof(DateTimeOffset)) { comparer = new DeteTimeOffsetEqualityComparer(); } else if (t == typeof(decimal)) { comparer = new DecimalEqualityComparer(); } else if (t == typeof(Guid)) { comparer = new GuidEqualityComparer(); } else if (t == typeof(Int16?)) { comparer = new NullableEqualityComparer <Int16>(); } else if (t == typeof(Int32?)) { comparer = new NullableEqualityComparer <Int32>(); } else if (t == typeof(Int64?)) { comparer = new NullableEqualityComparer <Int64>(); } else if (t == typeof(UInt16?)) { comparer = new NullableEqualityComparer <UInt16>(); } else if (t == typeof(UInt32?)) { comparer = new NullableEqualityComparer <UInt32>(); } else if (t == typeof(UInt64?)) { comparer = new NullableEqualityComparer <UInt64>(); } else if (t == typeof(Single?)) { comparer = new NullableEqualityComparer <Single>(); } else if (t == typeof(Double?)) { comparer = new NullableEqualityComparer <Double>(); } else if (t == typeof(bool?)) { comparer = new NullableEqualityComparer <bool>(); } else if (t == typeof(byte?)) { comparer = new NullableEqualityComparer <byte>(); } else if (t == typeof(sbyte?)) { comparer = new NullableEqualityComparer <sbyte>(); } else if (t == typeof(Char?)) { comparer = new NullableEqualityComparer <Char>(); } else if (t == typeof(TimeSpan?)) { comparer = new NullableEqualityComparer <TimeSpan>(); } else if (t == typeof(DateTime?)) { comparer = new NullableEqualityComparer <DateTime>(); } else if (t == typeof(DateTimeOffset?)) { comparer = new NullableEqualityComparer <DateTimeOffset>(); } else if (t == typeof(decimal?)) { comparer = new NullableEqualityComparer <decimal>(); } else if (t == typeof(Guid?)) { comparer = new NullableEqualityComparer <Guid>(); } #if !UNITY else if (t.GetTypeInfo().GetInterfaces().Any(x => x == typeof(IKeyTuple))) { var ti = t.GetTypeInfo(); Type keyTupleComparerType = null; switch (ti.GetGenericArguments().Length) { case 1: keyTupleComparerType = typeof(KeyTupleEqualityComparer <>); break; case 2: keyTupleComparerType = typeof(KeyTupleEqualityComparer <,>); break; case 3: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, ,>); break; case 4: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , ,>); break; case 5: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , ,>); break; case 6: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , , ,>); break; case 7: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , , , ,>); break; case 8: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , , , , ,>); break; default: break; } var formatterType = keyTupleComparerType.MakeGenericType(ti.GetGenericArguments()); comparer = Activator.CreateInstance(formatterType); } // Unity Can't use EnumEqualityComparer. else if (t.GetTypeInfo().IsEnum) { comparer = EnumEqualityComparer <T> .Default; } else if (t.GetTypeInfo().IsNullable() && t.GetTypeInfo().GenericTypeArguments[0].GetTypeInfo().IsEnum) { var formatterType = typeof(NullableEqualityComparer <>).MakeGenericType(t.GetTypeInfo().GenericTypeArguments[0]); comparer = Activator.CreateInstance(formatterType); } #endif return(comparer); }
static ZeroFormatterEqualityComparer() { object comparer = null; var t = typeof(T); if (t == typeof(Int16)) { comparer = new Int16EqualityComparer(); } else if (t == typeof(Int32)) { comparer = new Int32EqualityComparer(); } else if (t == typeof(Int64)) { comparer = new Int64EqualityComparer(); } else if (t == typeof(UInt16)) { comparer = new UInt16EqualityComparer(); } else if (t == typeof(UInt32)) { comparer = new UInt32EqualityComparer(); } else if (t == typeof(UInt64)) { comparer = new UInt64EqualityComparer(); } else if (t == typeof(Single)) { comparer = new SingleEqualityComparer(); } else if (t == typeof(Double)) { comparer = new DoubleEqualityComparer(); } else if (t == typeof(bool)) { comparer = new BoolEqualityComparer(); } else if (t == typeof(byte)) { comparer = new ByteEqualityComparer(); } else if (t == typeof(sbyte)) { comparer = new SByteEqualityComparer(); } else if (t == typeof(String)) { comparer = new StringEqualityComparer(); } else if (t == typeof(Char)) { comparer = new CharEqualityComparer(); } #if !UNITY else if (t.GetTypeInfo().GetInterfaces().Any(x => x == typeof(IKeyTuple))) { var ti = t.GetTypeInfo(); Type keyTupleComparerType = null; switch (ti.GetGenericArguments().Length) { case 1: keyTupleComparerType = typeof(KeyTupleEqualityComparer <>); break; case 2: keyTupleComparerType = typeof(KeyTupleEqualityComparer <,>); break; case 3: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, ,>); break; case 4: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , ,>); break; case 5: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , ,>); break; case 6: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , , ,>); break; case 7: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , , , ,>); break; case 8: keyTupleComparerType = typeof(KeyTupleEqualityComparer <, , , , , , ,>); break; default: break; } var formatterType = keyTupleComparerType.MakeGenericType(ti.GetGenericArguments()); comparer = Activator.CreateInstance(formatterType); } // Unity Can't use EnumEqualityComparer. else if (t.GetTypeInfo().IsEnum) { comparer = EnumEqualityComparer <T> .Default; } #endif else { comparer = new ErrorEqualityComparer <T>(); } defaultComparer = (IEqualityComparer <T>)comparer; }