Ler em inglês

Compartilhar via


IComparable<T>.CompareTo(T) Método

Definição

Compara a instância atual com outro objeto do mesmo tipo e retorna um inteiro que indica se a instância atual precede, segue ou ocorre na mesma posição da ordem de classificação do outro objeto.

C#
public int CompareTo (T other);
C#
public int CompareTo (T? other);

Parâmetros

other
T

Um objeto a ser comparado com essa instância.

Retornos

Int32

Um valor que indica a ordem relativa dos objetos que estão sendo comparados. O valor retornado tem estes significados:

Valor Significado
Menor que zero Esta instância precede other na ordem de classificação.
Zero Esta instância ocorre na mesma posição que other na ordem de classificação.
Maior que zero Esta instância segue other na ordem de classificação.

Exemplos

O exemplo de código a seguir ilustra a implementação de IComparable<T> um objeto simples Temperature . O exemplo cria uma SortedList<TKey,TValue> coleção de cadeias de caracteres com Temperature chaves de objeto e adiciona vários pares de temperaturas e cadeias de caracteres à lista fora da sequência. Na chamada ao Add método, a SortedList<TKey,TValue> coleção usa a IComparable<T> implementação para classificar as entradas da lista, que são exibidas em ordem de aumento da temperatura.

C#
using System;
using System.Collections.Generic;

public class Temperature : IComparable<Temperature>
{
    // Implement the generic CompareTo method with the Temperature
    // class as the Type parameter.
    //
    public int CompareTo(Temperature other)
    {
        // If other is not a valid object reference, this instance is greater.
        if (other == null) return 1;

        // The temperature comparison depends on the comparison of
        // the underlying Double values.
        return m_value.CompareTo(other.m_value);
    }

    // Define the is greater than operator.
    public static bool operator >  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) > 0;
    }

    // Define the is less than operator.
    public static bool operator <  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) < 0;
    }

    // Define the is greater than or equal to operator.
    public static bool operator >=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) >= 0;
    }

    // Define the is less than or equal to operator.
    public static bool operator <=  (Temperature operand1, Temperature operand2)
    {
       return operand1.CompareTo(operand2) <= 0;
    }

    // The underlying temperature value.
    protected double m_value = 0.0;

    public double Celsius
    {
        get
        {
            return m_value - 273.15;
        }
    }

    public double Kelvin
    {
        get
        {
            return m_value;
        }
        set
        {
            if (value < 0.0)
            {
                throw new ArgumentException("Temperature cannot be less than absolute zero.");
            }
            else
            {
                m_value = value;
            }
        }
    }

    public Temperature(double kelvins)
    {
        this.Kelvin = kelvins;
    }
}

public class Example
{
    public static void Main()
    {
        SortedList<Temperature, string> temps =
            new SortedList<Temperature, string>();

        // Add entries to the sorted list, out of order.
        temps.Add(new Temperature(2017.15), "Boiling point of Lead");
        temps.Add(new Temperature(0), "Absolute zero");
        temps.Add(new Temperature(273.15), "Freezing point of water");
        temps.Add(new Temperature(5100.15), "Boiling point of Carbon");
        temps.Add(new Temperature(373.15), "Boiling point of water");
        temps.Add(new Temperature(600.65), "Melting point of Lead");

        foreach( KeyValuePair<Temperature, string> kvp in temps )
        {
            Console.WriteLine("{0} is {1} degrees Celsius.", kvp.Value, kvp.Key.Celsius);
        }
    }
}
/* This example displays the following output:
      Absolute zero is -273.15 degrees Celsius.
      Freezing point of water is 0 degrees Celsius.
      Boiling point of water is 100 degrees Celsius.
      Melting point of Lead is 327.5 degrees Celsius.
      Boiling point of Lead is 1744 degrees Celsius.
      Boiling point of Carbon is 4827 degrees Celsius.
*/

Comentários

CompareTo fornece um método de comparação fortemente tipado para ordenar membros de um objeto de coleção genérico. Por isso, geralmente não é chamado diretamente do código do desenvolvedor. Em vez disso, ele é chamado automaticamente por métodos como List<T>.Sort() e Add.

Esse método é apenas uma definição e deve ser implementado por uma classe ou tipo de valor específico para ter efeito. O significado das comparações especificadas na seção Valores retornados ("precede", "ocorre na mesma posição que" e "segue) depende da implementação específica.

Por definição, qualquer objeto compara maior que null, e duas referências nulas se comparam igual umas às outras.

Notas aos Implementadores

Para os objetos A, B e C, o seguinte deve ser verdadeiro: A.CompareTo(A) é necessário para retornar zero.

Se A.CompareTo(B) retornar zero, B.CompareTo(A) será necessário para retornar zero.

Se A.CompareTo(B) retornar zero e B.CompareTo(C) retornar zero, A.CompareTo(C) será necessário para retornar zero.

Se A.CompareTo(B) retornar um valor diferente de zero, B.CompareTo(A) será necessário para retornar um valor do sinal oposto.

Se A.CompareTo(B) retornar um valor x que não é igual a zero e B.CompareTo(C) retornar um valor y do mesmo sinal xque, A.CompareTo(C) será necessário para retornar um valor do mesmo sinal x que e y.

Notas aos Chamadores

Use o CompareTo(T) método para determinar a ordenação de instâncias de uma classe.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Confira também