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

## Definition

Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.

`` virtual int System.Collections.IComparer.Compare(System::Object ^ x, System::Object ^ y) = System::Collections::IComparer::Compare;``
``int IComparer.Compare (object x, object y);``
``````abstract member System.Collections.IComparer.Compare : obj * obj -> int
override this.System.Collections.IComparer.Compare : obj * obj -> int``````
``Function Compare (x As Object, y As Object) As Integer Implements IComparer.Compare``

#### Parameters

x
Object

The first object to compare.

y
Object

The second object to compare.

#### Returns

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

`x` or `y` is of a type that cannot be cast to type `T`.

-or-

`x` and `y` do not implement either the IComparable<T> generic interface or the IComparable interface.

## Examples

The following example shows how to use the IComparer.Compare method to compare two objects. This example is part of a larger example provided for the Comparer<T> class.

``````
// This explicit interface implementation
// compares first by the length.
// Returns -1 because the length of BoxA
// is less than the length of BoxB.
BoxLengthFirst LengthFirst = new BoxLengthFirst();

Comparer<Box> bc = (Comparer<Box>) LengthFirst;

Box BoxA = new Box(2, 6, 8);
Box BoxB = new Box(10, 12, 14);
int x = LengthFirst.Compare(BoxA, BoxB);
Console.WriteLine();
Console.WriteLine(x.ToString());
``````
``````
' This explicit interface implementation
' compares first by the length.
' Returns -1 because the length of BoxA
' is less than the length of BoxB.
Dim LengthFirst As New BoxLengthFirst()

Dim bc As Comparer(Of Box) = CType(LengthFirst, Comparer(Of Box))

Dim BoxA As New Box(2, 6, 8)
Dim BoxB As New Box(10, 12, 14)
Dim x As Integer = LengthFirst.Compare(BoxA, BoxB)
Console.WriteLine()
Console.WriteLine(x.ToString())
``````

## Remarks

This method is a wrapper for the Compare(T, T) method, so `obj` must be cast to the type specified by the generic argument `T` of the current instance. If it cannot be cast to `T`, an ArgumentException is thrown.

Comparing `null` with any reference type is allowed and does not generate an exception. When sorting, `null` is considered to be less than any other object.

## Notes to Callers

Compare(T, T) and Equals(T, T) behave differently in terms of culture-sensitivity and case-sensitivity.

For string comparisons, the StringComparer class is recommended over `Comparer<String>`. Properties of the StringComparer class return predefined instances that perform string comparisons with different combinations of culture-sensitivity and case-sensitivity. The case-sensitivity and culture-sensitivity are consistent among the members of the same StringComparer instance.

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