CsharpProgramación

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.