Ensamblado: mscorlib (en mscorlib.dll)
Public Delegate Function Comparison(Of T) ( _ x As T, _ y As T _ ) As Integer
Dim instance As New Comparison(Of T)(AddressOf HandlerMethod)
public delegate int Comparison<T> ( T x, T y )
generic<typename T> public delegate int Comparison ( 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.
Imports System Imports System.Collections.Generic Public Class Example Private Shared Function CompareDinosByLength( _ ByVal x As String, ByVal y As String) As Integer If x Is Nothing Then If y Is Nothing Then ' If x is Nothing and y is Nothing, they're ' equal. Return 0 Else ' If x is Nothing and y is not Nothing, y ' is greater. Return -1 End If Else ' If x is not Nothing... ' If y Is Nothing Then ' ...and y is Nothing, x is greater. Return 1 Else ' ...and y is not Nothing, compare the ' lengths of the two strings. ' Dim retval As Integer = _ x.Length.CompareTo(y.Length) If retval <> 0 Then ' 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) End If End If End If End Function Public Shared Sub Main() Dim dinosaurs As New List(Of String) dinosaurs.Add("Pachycephalosaurus") dinosaurs.Add("Amargasaurus") dinosaurs.Add("") dinosaurs.Add(Nothing) dinosaurs.Add("Mamenchisaurus") dinosaurs.Add("Deinonychus") Display(dinosaurs) Console.WriteLine(vbLf & "Sort with generic Comparison(Of String) delegate:") dinosaurs.Sort(AddressOf CompareDinosByLength) Display(dinosaurs) End Sub Private Shared Sub Display(ByVal lis As List(Of String)) Console.WriteLine() For Each s As String In lis If s Is Nothing Then Console.WriteLine("(Nothing)") Else Console.WriteLine("""{0}""", s) End If Next End Sub End Class ' This code example produces the following output: ' '"Pachycephalosaurus" '"Amargasaurus" '"" '(Nothing) '"Mamenchisaurus" '"Deinonychus" ' 'Sort with generic Comparison(Of String) delegate: ' '(Nothing) '"" '"Deinonychus" '"Amargasaurus" '"Mamenchisaurus" '"Pachycephalosaurus"
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" */
using namespace System; using namespace System::Collections::Generic; int CompareDinosByLength(String^ x, String^ y) { if (x == nullptr) { if (y == nullptr) { // 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 == nullptr) // ...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); } } } }; void Display(List<String^>^ list) { Console::WriteLine(); for each(String^ s in list) { if (s == nullptr) Console::WriteLine("(null)"); else Console::WriteLine("\"{0}\"", s); } }; void main() { List<String^>^ dinosaurs = gcnew List<String^>(); dinosaurs->Add("Pachycephalosaurus"); dinosaurs->Add("Amargasaurus"); dinosaurs->Add(""); dinosaurs->Add(nullptr); dinosaurs->Add("Mamenchisaurus"); dinosaurs->Add("Deinonychus"); Display(dinosaurs); Console::WriteLine("\nSort with generic Comparison<String^> delegate:"); dinosaurs->Sort( gcnew Comparison<String^>(CompareDinosByLength)); Display(dinosaurs); } /* 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.