FastComparer(Type type) { Type = type; var comparerType = typeof(Comparer <>).MakeGenericType(type); comparer = comparerType.GetRuntimeProperty(nameof(Comparer <object> .Default)).GetValue(null); compare = FastMethodInfo.Get(comparerType.GetRuntimeMethod(nameof(Comparer <object> .Compare), new Type[] { type })); }
FastEqualityComparer(Type type) { Type = type; var equalityComparerType = typeof(EqualityComparer <>).MakeGenericType(type); equalityComparer = equalityComparerType.GetRuntimeProperty(nameof(EqualityComparer <object> .Default)).GetValue(null); equals = FastMethodInfo.Get(equalityComparerType.GetRuntimeMethod(nameof(EqualityComparer <object> .Equals), new Type[] { type, type })); getHashCode = FastMethodInfo.Get(equalityComparerType.GetRuntimeMethod(nameof(EqualityComparer <object> .GetHashCode), new Type[] { type })); }