Guía Práctica de LINQ y Métodos de Extensión en C#

En el desarrollo en C#, la combinación de LINQ y métodos de extensión proporciona una forma poderosa y eficiente de manipular datos y colecciones. En este artículo, exploraremos cómo utilizar estos conceptos a través de ejercicios prácticos.


1. Creación de un Método de Extensión para BinaryReader

Los métodos de extensión permiten agregar funcionalidades a clases existentes sin modificar su código fuente. En este caso, agregamos un método para leer varios enteros de un archivo binario:

using System;
using System.IO;

public static class BinaryReaderExtensions
{
    public static int[] LeeVariosEnteros(this BinaryReader br, int cantidad)
    {
        int[] matriz = new int[cantidad];
        for (int i = 0; i < cantidad; i++)
        {
            if (br.BaseStream.Position < br.BaseStream.Length)
                matriz[i] = br.ReadInt32();
            else
                break;
        }
        return matriz;
    }
}

2. Validar si una Cadena es una Fecha

Podemos extender la clase String para verificar si un texto representa una fecha válida:

using System;
using System.Globalization;

public static class StringExtensions
{
    public static bool EsFecha(this string str)
    {
        DateTime fecha;
        return DateTime.TryParseExact(str, "MM/dd/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out fecha);
    }
}

Uso:

Console.WriteLine("10/20/20".EsFecha());  // True
Console.WriteLine("32/12/2023".EsFecha()); // False

3. Insertar Fechas Ordenadas en una Lista

Este método de extensión permite insertar fechas en una lista ordenada:

using System;
using System.Collections.Generic;

public static class ListDateTimeExtensions
{
    public static void InsertarFechaOrdenada(this List<DateTime> lista, DateTime fecha)
    {
        int posicion = lista.BinarySearch(fecha);
        if (posicion < 0)
            posicion = ~posicion;
        lista.Insert(posicion, fecha);
    }
}

Ejemplo de uso:

List<DateTime> fechas = new List<DateTime>
{
    new DateTime(2000, 5, 12),
    new DateTime(2005, 11, 23),
    new DateTime(2010, 3, 15)
};

fechas.InsertarFechaOrdenada(new DateTime(2007, 6, 10));

4. Expresión Lambda para Calcular la Presión Media de un Coche

Las expresiones lambda simplifican el código eliminando la necesidad de escribir métodos tradicionales:

using System;

class Coche
{
    public float R1 { get; set; }
    public float R2 { get; set; }
    public float R3 { get; set; }
    public float R4 { get; set; }
}

class Program
{
    static void Main()
    {
        Func<Coche, float> calcularPresionMedia = c => (c.R1 + c.R2 + c.R3 + c.R4) / 4;

        Coche miCoche = new Coche { R1 = 2.5f, R2 = 2.3f, R3 = 2.4f, R4 = 2.6f };
        Console.WriteLine("Presión media: " + calcularPresionMedia(miCoche));
    }
}

5. Obtener la Letra del DNI con una Expresión Lambda

Una forma eficiente de calcular la letra del DNI en base a su número:

using System;

class Program
{
    static void Main()
    {
        Func<int, char> obtenerLetraDNI = dni => "TRWAGMYFPDXBNJZSQVHLCKE"[dni 

        int numeroDNI = 12345678;
        Console.WriteLine($"La letra del DNI {numeroDNI} es: {obtenerLetraDNI(numeroDNI)}");
    }
}

Conclusión

Los métodos de extensión y expresiones lambda en C# permiten optimizar el código y mejorar su legibilidad. Al combinarlos con LINQ, podemos manipular datos de manera más concisa y eficiente.

¡Prueba estos ejemplos en tu próximo proyecto y explora nuevas formas de mejorar tu código!

Si quieres aprender más sobre LINQ y programación en C#, visita mi blog donde comparto guías y tutoriales detallados.

macbook pro
Photo by Pixabay on Pexels.com

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad