Всем привет!
Предлагаю добавить ограничение IEquatable<T> и дополнительную перегрузку для Nullable.
public static bool EqualsTo<T>(this T[] a, T[] b) where T : IEquatable<T>
public static bool EqualsTo<T>(this T?[] a, T?[] b) where T : struct, IEquatable<T>
Это позволит исключить из генерации перегрузки для nullable примитивных типов. Плюсом будет то, что таким образом будет обеспечена более производительная поддержка для типов реализующих IEquatable<T>, в особенности для value-типов.
Для типов, не реализующих IEquatable<T>, у нас есть другая перегрузка, принимающая IEqualityComparer<T>.
public static bool EqualsTo<T>(this T[] a, T[] b, IEqualityComparer<T> comparer)
Сейчас у нас первый метод делегирует вызов во второй с передачей компарера, от чего появляется дополнительная косвенность в случаях, когда этого можно было бы избежать.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>