internal int CompareObjects(object value1, object value2, int rowIndex1, int rowIndex2) { if (value1 is ComparedObjectMax) { return(1); } else if (value2 is ComparedObjectMax) { return(-1); } int result = 0; if (customComparer is null) { if (!dataGridView.OnSortCompare(dataGridViewSortedColumn, value1, value2, rowIndex1, rowIndex2, out result)) { if (!(value1 is IComparable) && !(value2 is IComparable)) { if (value1 is null) { if (value2 is null) { result = 0; } else { result = 1; } } else if (value2 is null) { result = -1; } else { result = Comparer.Default.Compare(value1.ToString(), value2.ToString()); } } else { result = Comparer.Default.Compare(value1, value2); } if (result == 0) { if (ascending) { result = rowIndex1 - rowIndex2; } else { result = rowIndex2 - rowIndex1; } } } } else { Debug.Assert(value1 is DataGridViewRow); Debug.Assert(value2 is DataGridViewRow); Debug.Assert(value1 is not null); Debug.Assert(value2 is not null); // result = customComparer.Compare(value1, value2); } if (ascending) { return(result); } else { return(-result); } }