Equality comparision w/o boxing conversions `GetType()` is bad, never call reflection methods whenever possible. There is absolutely NO contract for `T` to implement `Equals(T)` this implies that a struct T would have to be boxed unnecessarily. Using `EqualityComparer<T>.Default` Lazily initialized comparer saves us all allocations, there is not need for any at all.
Equality comparision w/o boxing conversions
`GetType()` is bad, never call reflection methods whenever possible.
There is absolutely NO contract for `T` to implement `Equals(T)` this implies that a struct T would have to be boxed unnecessarily. Using `EqualityComparer<T>.Default` Lazily initialized comparer saves us all allocations, there is not need for any at all.

vkhorikov/CSharpFunctionalExtensions