¿Cómo encontrar un objeto de clase en una List <T> por uno o más campos de clase? [duplicar]

Nov 09 2020

Tengo este codigo:

class Garage
    {
        private List <Car> cars;

        public void AddCar (string carModel, string color, double speed, int yearOfIssue)
        {
            Car car = new Car (carModel, color, speed, yearOfIssue);
            cars.Add (car);
        }

        public void DeleteCar (string carModel, string color, double speed, int yearOfIssue)
        {
           
        }
    }

    class Car
    {
        public Car ()
        {
            
        }

        public Car (string carModel, string color, double speed, int yearOfIssue)
        {
            this.carModel = carModel;
            this.color = color;
            this.speed = speed;
            this.yearOfIssue = yearOfIssue;
        }

        private string carModel;
        private string color;
        private double speed;
        private int yearOfIssue;
    }

En la clase Garage, necesito implementar el método DeleteCar. Entonces, cuando el método está llamando, el usuario ingresa los 4 campos o algunos de ellos, y luego de eso el objeto en la Lista será ubicado y eliminado, ¿cómo se puede implementar y con qué ayuda?

Respuestas

xtadex Nov 09 2020 at 23:35

Para eliminar se puede utilizar el método RemoveAll ():

https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.removeall?view=netcore-3.1

public void DeleteCar (string carModel, string color, double speed, int yearOfIssue)
{
    cars.RemoveAll(c => 
        c.carModel == carModel && 
        c.color == color&& 
        c.speed == speed&& 
        c.yearOfIssue == yearOfIssue);
}

o

class Car
{
    public bool Equals(Car other)
    { 
        return other.carModel == carModel && 
             other.color == color&& 
             other.speed == speed&& 
             other.yearOfIssue == yearOfIssue;
    }
}

public void DeleteCar (string carModel, string color, double speed, int yearOfIssue)
{
    Car car = new Car (carModel, color, speed, yearOfIssue);
    cars.RemoveAll(c => c.Equals(car));
}