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](https://infogonzalez.com/wp-content/uploads/2024/02/pexels-photo-459653-1-1024x682.jpeg)