Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Interface IComparable<T>

 
System_CAPS_noteObservação

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Define um método de comparação generalizado que implementa uma classe ou um tipo de valor para criar um método de comparação de tipo específico para ordenar ou classificar suas instâncias.

Namespace:   System
Assembly:  mscorlib (em mscorlib.dll)

public interface IComparable<in T>

Parâmetros de Tipo

inT

O tipo de objeto a ser comparado.

NomeDescrição
System_CAPS_pubmethodCompareTo(T)

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.

Essa interface é implementada por tipos cujos valores podem ser ordenados ou classificados e fornece um método de comparação com rigidez de tipos para ordenar os membros de um objeto de coleção genérica. Por exemplo, um número pode ser maior que o segundo número e uma cadeia de caracteres pode aparecer em ordem alfabética antes da outra. Requer que os tipos de implementação definem um único método, CompareTo(T), que indica se a posição da instância atual na ordem de classificação é antes, depois, ou o mesmo que um segundo objeto do mesmo tipo. Normalmente, o método não é chamado diretamente no código do desenvolvedor. Em vez disso, ele é chamado automaticamente pelos métodos como List<T>.Sort() e Add.

Normalmente, os tipos que fornecem uma IComparable<T> implementação também implementam o IEquatable<T> interface. O IEquatable<T> interface define o Equals método, que determina a igualdade de instâncias do tipo de implementação.

A implementação de CompareTo(T) método deve retornar um Int32 que tem um dos três valores, conforme mostrado na tabela a seguir.

Valor

Significado

Menor que zero

Esse objeto precede o objeto especificado pelo CompareTo método na ordem de classificação.

Zero

Esta instância atual ocorre na mesma posição na ordem de classificação como o objeto especificado pelo CompareTo argumento de método.

Maior que zero

Esta instância atual segue o objeto especificado pelo CompareTo argumento do método na ordem de classificação.

Todos os tipos numéricos (como Int32 e Double) implementar IComparable<T>, assim como String, Char, e DateTime. Tipos personalizados também devem fornecer sua própria implementação de IComparable<T> para habilitar instâncias de objeto a ser ordenados ou classificado.

Observações para os Implementadores:

Substitua o parâmetro de tipo de IComparable<T> interface com o tipo que implementa essa interface.

Se você implementar IComparable<T>, você deve sobrecarregar o op_GreaterThan, op_GreaterThanOrEqual, op_LessThan, e op_LessThanOrEqual operadores para retornar valores que são consistentes com CompareTo. Além disso, você também deve implementar IEquatable<T>. Consulte o IEquatable<T> artigo para obter informações completas.

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

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) == 1;
    }

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

    // 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.
*/

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 2.0
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1
Retornar ao início
Mostrar: