C# ObjectArrayComparer

Date: 2025-05-07
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);
	}
}
94750cookie-checkC# ObjectArrayComparer