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