Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

Delegado genérico Comparison

Nota: este delegado es nuevo en la versión 2.0 de .NET Framework.

Representa el método que compara dos objetos del mismo tipo.

Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)

public delegate int Comparison<T> (
	T x,
	T y
)
J# admite el uso de métodos y tipos genéricos, pero no admite la declaración de métodos y tipos nuevos.
JScript no admite el uso de métodos y tipos genéricos.

Parámetros de tipo

T

Tipo de los objetos que se van a comparar.

Parámetros

x

Primer objeto que se va a comparar.

y

Segundo objeto que se va a comparar.

Valor devuelto

Valor

Condición

Menor que 0

x es menor que y.

0

x es igual a y.

Mayor que 0

x es mayor que y.

La sobrecarga del método Sort(J[],Comparison genérico) de la clase Array y la sobrecarga del método Sort(Comparison genérico) de la clase List utilizan este delegado para ordenar los elementos de una matriz o lista.

En el ejemplo de código siguiente se muestra la forma de utilizar el delegado Comparison con la sobrecarga del método Sort(Comparison genérico).

En el ejemplo de código se define un método de comparación alternativo para las cadenas, denominado CompareDinosByLength. Este método funciona de la siguiente manera: en primer lugar, se prueban los términos de la comparación para referencia de objeto null (Nothing en Visual Basic), y se considera una referencia nula como un valor menor que una referencia no nula. En segundo lugar, se compara la longitud de las cadenas, y la cadena más larga se considera la mayor. En tercer lugar, si las longitudes son iguales, se utiliza la comparación de cadena ordinaria.

Se crea un objeto List de cadenas y se rellena de cuatro cadenas, sin un orden concreto. La lista también incluye una cadena vacía y una referencia nula. Se muestra la lista, luego se ordena utilizando un delegado genérico Comparison que representa al método CompareDinosByLength y se vuelve a mostrar nuevamente.

using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal. 
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater. 
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the 
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        List<string> dinosaurs = new List<string>();
        dinosaurs.Add("Pachycephalosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("");
        dinosaurs.Add(null);
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        dinosaurs.Sort(CompareDinosByLength);
        Display(dinosaurs);

    }

    private static void Display(List<string> list)
    {
        Console.WriteLine();
        foreach( string s in list )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0

.NET Compact Framework

Compatible con: 2.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft