Uso Detallado de Delegados Integrados Comunes en C#

Delegados Integrados Comunes en C#

Delegados de la clase Action

Los delegados Action ecnapsulan métodos que no toman parámetros y no devuelven ningún valor.

  • Action: Para métodos sin parámetros y sin valor de retorno.
  • Action<T>: Para métodos con un parámetro y sin valor de retorno.
  • Action<T1, T2>: Para métodos con dos parámetros y sin valor de retorno.

Ejemplo de Action<T>

Imprimir elementos de una lista de enteros:


static void Main(string[] args)
{
   List<int> numeros = new List<int&gt() { 1, 2, 3, 4, 5 };

   // Usando un método anónimo con Action<int>
   Action<int> imprimirElemento = delegate(int num)
   {
       Console.WriteLine(num);
   };
   numeros.ForEach(imprimirElemento);

   // Usando una expresión lambda con Action<int>
   Action<int> imprimirElementoLambda = (num) => Console.WriteLine(num);
   numeros.ForEach(imprimirElementoLambda);

   Console.ReadKey();
}
 

Delegados de la clase Func

Los delegados Func encapsulan métodos que pueden tomar parámetros y siempre devuelven un valor del tipo especificado.

  • Func<TResult>: Para métodos sin parámetros que devuelven un valor de tipo TResult.
  • Func<T, TResult>: Para métodos con un parámetro de tipo T que devuelven un valor de tipo TResult.
  • Func<T1, T2, TResult>: Para métodos con dos parámetros de tipos T1 y T2 que devuelven un valor de tipo TResult.

Ejemplo de Func<T, TResult>

Filtrar elementos de una lista de enteros mayores que 3 y mostrar los resultados:


static void Main(string[] args)
{
   List<int> numeros = new List<int&gt() { 1, 2, 3, 4, 5 };

   // Usando un método anónimo con Func<int, bool>
   Func<int, bool> esMayorQueTres = delegate(int num)
   {
       return num > 3;
   };
   var listaFiltrada1 = numeros.Where(esMayorQueTres).ToList();

   // Usando una expresión lambda con Func<int, bool>
   Func<int, bool> esMayorQueTresLambda = num => num > 3;
   var listaFiltrada2 = numeros.Where(esMayorQueTresLambda).ToList();

   listaFiltrada1.ForEach(num => Console.WriteLine(num.ToString()));
   listaFiltrada2.ForEach(num => Console.WriteLine(num.ToString()));

   Console.ReadKey();
}
 

Delegado Predicate<T>

El delegado Predicate<T> representa un método que define un conjunto de condiciones y determina si un objeto especificado cumple dichas condiciones. Devuelve un valor booleano.

Ejemplo de Predicate<T>

Filtrar elementos de una lista de enteros mayores que 3:


static void Main(string[] args)
{
   List<int> numeros = new List<int&gt() { 1, 2, 3, 4, 5 };

   // Usando un método anónimo con Predicate<int>
   Predicate<int> cumpleCondicion = delegate(int num)
   {
       return num > 3;
   };
   var listaFiltrada1 = numeros.FindAll(cumpleCondicion);

   // Usando una expresión lambda con Predicate<int>
   Predicate<int> cumpleCondicionLambda = (num) => num > 3;
   var listaFiltrada2 = numeros.FindAll(cumpleCondicionLambda);

   listaFiltrada1.ForEach(num => Console.WriteLine(num));
   listaFiltrada2.ForEach(num => Console.WriteLine(num));

   Console.ReadKey();
}
 

Delegado Comparison<T>

El delegado Comparison<T> representa un método que compara dos objetos del mismo tipo. Devuelve un entero que indica si el primer objeto es menor, igual o mayor que el segundo.

Ejemplo de Comparison<T>

Ordenar una lista de enteros en orden descendente:


static void Main(string[] args)
{
   List<int> numeros = new List<int&gt() { 1, 2, 3, 4, 5 };

   // Usando un método anónimo con Comparison<int> para orden descendente
   Comparison<int> comparadorDesc = delegate(int a, int b)
   {
       return b - a; // Orden descendente
   };
   numeros.Sort(comparadorDesc);
   numeros.ForEach(num => Console.WriteLine(num.ToString()));

   // Reiniciar lista para demostración
   numeros = new List<int&gt() { 1, 2, 3, 4, 5 };

   // Usando una expresión lambda con Comparison<int> para orden descendente
   Comparison<int> comparadorDescLambda = (a, b) => b - a; // Orden descendente
   numeros.Sort(comparadorDescLambda);
   numeros.ForEach(num => Console.WriteLine(num.ToString()));

   Console.ReadKey();
}
 

Etiquetas: C# Delegados Action Func Predicate

Publicado el 6-15 01:33