Usar OfType() en C#: Una herramienta valiosa para filtrar colecciones
Aprenda a utilizar la función OfType() en C# para mejorar la eficiencia y legibilidad de su código
La función OfType() es una herramienta valiosa en el lenguaje de programación C# que permite filtrar colecciones de objetos y obtener solo los elementos que pertenecen a un tipo específico. Esta función se puede utilizar en situaciones comunes de programación, como la manipulación de datos y la interacción con bases de datos.
1. Filtrar objetos de una lista de tipo base a un tipo derivado
// Ejemplo: Filtrar objetos de tipo Animal a Mamifero
List<Animal> animales = new List<Animal>() { new Perro(), new Gato(), new Pato() };
List<Mamifero> mamiferos = animales.OfType<>().ToList();
OfType<Mammal>(): Esta línea de código filtra los objetos de tipo Animal a los que pertenecen al tipo derivado Mamifero.
2. Filtrar objetos con una propiedad específica
// Ejemplo: Filtrar objetos de tipo Persona con edad mayor a 18 años
List<Persona> personas = new List<Persona>() { new Persona(16), new Persona(20), new Persona(35) };
List<Persona> mayoresDeEdad = personas.Where(p => p.Edad > 18).ToList();
OfType<T>(): En este caso, no se utiliza directamente OfType<T>(), sino que se utiliza Where() en combinación con una expresión lambda para filtrar objetos de la lista Persona con edad mayor a 18 años.
3. Filtrar objetos de un enumerable vacío
// Ejemplo: Lista vacía de números enteros
List<int> numeros = new List<>();
List<int> numerosMayoresACero = numeros.OfType<int>().ToList();
OfType<int>(): En este caso, la lista de números enteros está vacía, por lo que OfType<int>() no devuelve ningún objeto.
4. Filtrar objetos de un enumerable con duplicados
// Ejemplo: Lista de cadenas con duplicados
List<string> cadenas = new List<string>() { "hola", "mundo", "hola" };
List<string> sinDuplicados = cadenas.OfType<string>().ToList();
OfType<string>(): La línea de código OfType<string>() elimina los duplicados de la lista, dejando solo una única instancia de cada objeto.
5. Filtrar objetos de un enumerable con elementos nulos
// Ejemplo: Lista de cadenas con elementos nulos
List<string> cadenas = new List<string>() { "hola", null, "mundo", null };
List<string> sinNulos = cadenas.OfType<string>().ToList();
OfType<string>(): La línea de código OfType<string>() elimina los elementos nulos de la lista, dejando solo las cadenas no nulas.
6. Filtrar objetos de un enumerable con conversiones explícitas
// Ejemplo: Lista de enteros a números decimales
List<int> enteros = new List<int>() { 1, 2, 3 };
List<decimal> decimales = enteros.Select(x => (decimal)x).ToList();
OfType<T>(): En este caso, se utiliza Select() en combinación con una conversión explícita para convertir los enteros a números decimales.
7. Filtrar objetos de un enumerable con conversiones implícitas
// Ejemplo: Lista de números enteros a cadenas
List<int> enteros = new List<int>() { 1, 2, 3 };
List<string> cadenas = enteros.Select(x => x.ToString()).ToList();
OfType<T>(): En este caso, se utiliza Select() en combinación con una conversión implícita para convertir los números enteros a cadenas.
8. Filtrar objetos de un enumerable con operadores de comparación
// Ejemplo: Lista de números enteros pares
List<int> enteros = new List<int>() { 1, 2, 3, 4, 5 };
List<int> pares = enteros.Where(x => x % 2 == 0).ToList();
OfType<T>(): En este caso, se utiliza Where() en combinación con un operador de comparación (% 2 == 0) para filtrar los números enteros pares.
9. Filtrar objetos de un enumerable con operadores lógicos
// Ejemplo: Lista de cadenas que contengan "a" o "e"
List<string> cadenas = new List<string>() { "hola", "mundo", "adios" };
List<string> conAoE = cadenas.Where(x => x.Contains("a") || x.Contains("e")).ToList();
OfType<T>(): En este caso, se utiliza Where() en combinación con un operador lógico (||) para filtrar las cadenas que contengan «a» o «e».
Conclusión
La función OfType() es una herramienta valiosa para los desarrolladores de C# que buscan mejorar la eficiencia y legibilidad de su código. Al utilizar esta función, puede filtrar colecciones de objetos y obtener solo los elementos que pertenecen a un tipo específico. Asegúrese de entender su uso correcto y aplique esta función en sus proyectos futuros para mejorar la calidad y eficiencia de su código.