es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Filtración de una lista de objetos basada en propiedades y sus valores.

Buenas tardes,
Estoy construyendo una aplicación básica de consola para aprender cómo filtrar datos de propiedades de una lista de objetos. Estoy intentando filtrar una lista de objetos basándome en la propiedad de objeto seleccionada por el usuario y su valor, pero tengo dificultades para conceptualizar cómo conectar la entrada del usuario con la propiedad del objeto, ya que las propiedades no tienen un índice.
Por ejemplo, si tenemos una lista de coches y el usuario selecciona filtrar por año e ingresa un año específico, deberíamos devolver esos coches.

foreach(var car in listOfCars)
{
if(…)
{
Console.WriteLine(car.Name);
Console.WriteLine(car.Year);
}
}

Puedo filtrar los datos usando caracteres comodín, pero ¿cómo se conecta un número de entrada seleccionado por el usuario con una propiedad?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una forma de conectar la entrada seleccionada por el usuario a una propiedad es creando una declaración switch-case que coincida con la entrada del usuario con la propiedad. Aquí tienes un ejemplo:

    string propertyToFilter = "";
    
    Console.WriteLine("¿Por qué propiedad te gustaría filtrar?");
    Console.WriteLine("1. Nombre");
    Console.WriteLine("2. Año");
    
    int userChoice = int.Parse(Console.ReadLine());
    
    switch (userChoice)
    {
        case 1:
            propertyToFilter = "Nombre";
            break;
        case 2:
            propertyToFilter = "Año";
            break;
        default:
            Console.WriteLine("Entrada inválida.");
            break;
    }
    
    Console.WriteLine("¿Por qué valor te gustaría filtrar?");
    string valueToFilter = Console.ReadLine();
    
    foreach (var car in listOfCars)
    {
        var propertyValue = car.GetType().GetProperty(propertyToFilter).GetValue(car, null);
        if (propertyValue.ToString().Contains(valueToFilter))
        {
            Console.WriteLine(car.Nombre);
            Console.WriteLine(car.Año);
        }
    }
    

    En este ejemplo, primero preguntamos al usuario por la propiedad por la que le gustaría filtrar y almacenamos su entrada en userChoice. Luego utilizamos una declaración switch-case para que coincida su entrada con el nombre de propiedad correspondiente y lo almacenamos en propertyToFilter.

    A continuación, pedimos al usuario el valor por el que le gustaría filtrar y lo almacenamos en valueToFilter. Luego recorremos la lista de coches (listOfCars) y utilizamos reflexión para obtener el valor de propertyToFilter para cada coche. Convertimos este valor a una cadena y comprobamos si contiene el valueToFilter. Si es así, imprimimos el nombre y el año del coche.

    Esta es solo una posible implementación, pero debería darte una idea de cómo conectar la entrada del usuario a una propiedad del objeto para filtrar.

Comments are closed.