# Comparer<T>.Compare(T, T) Method

## Definition

When overridden in a derived class, performs a comparison of two objects of the same type and returns a value indicating whether one object is less than, equal to, or greater than the other.

``````public:
abstract int Compare(T x, T y);``````
``public abstract int Compare (T x, T y);``
``public abstract int Compare (T? x, T? y);``
``abstract member Compare : 'T * 'T -> int``
``Public MustOverride Function Compare (x As T, y As T) As Integer``

#### Parameters

x
T

The first object to compare.

y
T

The second object to compare.

#### Returns

Int32

A signed integer that indicates the relative values of `x` and `y`, as shown in the following table.

Value Meaning
Less than zero `x` is less than `y`.
Zero `x` equals `y`.
Greater than zero `x` is greater than `y`.

#### Exceptions

Type `T` does not implement either the IComparable<T> generic interface or the IComparable interface.

## Examples

The following example defines a comparer of `Box` objects that can be used instead of the default comparer. This example is part of a larger example provided for the Comparer<T> class.

``````public class BoxLengthFirst : Comparer<Box>
{
// Compares by Length, Height, and Width.
public override int Compare(Box x, Box y)
{
if (x.Length.CompareTo(y.Length) != 0)
{
return x.Length.CompareTo(y.Length);
}
else if (x.Height.CompareTo(y.Height) != 0)
{
return x.Height.CompareTo(y.Height);
}
else if (x.Width.CompareTo(y.Width) != 0)
{
return x.Width.CompareTo(y.Width);
}
else
{
return 0;
}
}
}
``````
``````Public Class BoxLengthFirst
Inherits Comparer(Of Box)
' Compares by Length, Height, and Width.
Public Overrides Function Compare(ByVal x As Box, ByVal y As Box) As Integer
If x.Length.CompareTo(y.Length) <> 0 Then
Return x.Length.CompareTo(y.Length)
ElseIf x.Height.CompareTo(y.Height) <> 0 Then
Return x.Height.CompareTo(y.Height)
ElseIf x.Width.CompareTo(y.Width) <> 0 Then
Return x.Width.CompareTo(y.Width)
Else
Return 0
End If
End Function

End Class
``````

## Remarks

Implement this method to provide a customized sort order comparison for type `T`.

## Notes to Implementers

Comparing `null` with any reference type is allowed and does not generate an exception. A null reference is considered to be less than any reference that is not null.

For information on culture-specific comparisons, see the System.Globalization namespace and Globalization and Localization.