Solución: hay varias: recorrer la lista con un Foreach, hacer una consulta con Linq o usar una expresión lambda. Como se ve más elegante la expresión y ademas es un ámbito que casi no domino probemos esta última.
Probando: Primero creamos nuestra clase de prueba. En este caso una sencilla clase estudiante que contiene el nombre, una nota y un booleano para saber si esta eximido.
public class estudiante
{
public string nombre { get; set; }
public int nota { get; set; }
public bool eximido { get; set; }
}
Segundo, la consola en la que utilizaremos una lista de estudiantes.static void Main(string[] args)
{
List estudiantes = new List(){
new estudiante(){nombre ="Foy", nota=90, eximido = true },
new estudiante(){nombre ="Fer", nota=60, eximido = false },
new estudiante(){nombre ="Fran", nota=92, eximido = true },
new estudiante(){nombre ="Fidel", nota=91, eximido = true },
};
Finalmente usamos el método FindAll que recibe una función predicado, o sea, una función lambda que devuelva true, para los items que deseamos obtener como una lista de la misma clase estudiante. Y el recorrido para mostrar el resulta en consola.List Eximidos = estudiantes.FindAll(i => i.eximido == true);
foreach (estudiante eximido in Eximidos)
{
Console.WriteLine("{0} Nota: {1}", eximido.nombre, eximido.nota);
}
Console.ReadLine();
En esta caso la lista será filtrada por los estudiantes que tiene el indicador de eximidos en true, resultando en:Es prudente señalar que por dentro el FindAll utiliza un foreach para devolver el resultado pero como podemos ver es un método sencillo y elegante para filtrar listas genéricas.