public class ObjectArrayComparer : IComparer<object[]>
{
public int Compare(object[] x, object[] y)
{
if (ReferenceEquals(x, y)) return 0;
if (x is null) return -1;
if (y is null) return 1;
for (int i = 0; i < Math.Min(x.Length, y.Length); i++)
{
var a = x[i];
var b = y[i];
if (ReferenceEquals(a, b)) continue;
if (a is null) return -1;
if (b is null) return 1;
if (a.GetType() == b.GetType())
{
var cmp = Comparer.DefaultInvariant.Compare(a, b);
if (cmp != 0) return cmp;
}
else
{
var cmp = string.Compare(Convert.ToString(a, CultureInfo.InvariantCulture),
Convert.ToString(b, CultureInfo.InvariantCulture),
StringComparison.Ordinal);
if (cmp != 0) return cmp;
}
}
return x.Length.CompareTo(y.Length);
}
}947500cookie-checkC# ObjectArrayComparer