вот эффективный метод расширения, который должен добиться цели
public static bool Compare<T>(this T[] source, T[] target,
Func<T,T,bool> comparer )
{
if (source.Length != target.Length)
return false;
return !source.Where((t, i) => !comparer(t, target[i])).Any();
}
var a = new[] {2, 3, 4, 5, 6, 7, 8};
var b = new[] {2, 3, 4, 5, 6, 7, 8};
var c = new[] {2, 3, 4, 5, 6, 7, 8, 9};
var d = new[] {2, 4, 3, 5, 6, 8, 7};
var r1 = a.Compare(b, (i1, i2) => i1 == i2); // true
var r2 = a.Compare(c, (i1, i2) => i1 == i2); // false
var r3 = a.Compare(d, (i1, i2) => i1 == i2); // false