-2

Im trying to rewrite my current piece of code into (see example0. But it doesnt know the carriage animal in my CheckIfAnimalFits method. How would I fix this without moving the entire foreach into the method

Current code

public bool AddAnimaltoWagon(Animal animal)
{
    if (CheckWagonFull(animal) == true ) { return false; }

    foreach (Animal carriageAnimal in Animals)
    {
        if (carriageAnimal.AnimalDiet == AnimalDiet.Carnivore 
          && animal.Size <= carriageAnimal.Size 
          || animal.AnimalDiet == AnimalDiet.Carnivore 
          && animal.Size > carriageAnimal.Size)
        {
            return false;
        }
    }

    Animals.Add(animal);
    return true;
}

trying to get

public bool AddAnimaltoWagon(Animal animal)
{
    if (CheckWagonFull(animal) == true ) { return false; }

    foreach (Animal carriageAnimal in Animals)
    {
        if (CheckIfAnimalFits == false)
        {
            return false;
        }
    }

    Animals.Add(animal);
    return true;
}

public bool CheckIfAnimalFits(Animal animal)
{
    if (carriageAnimal.AnimalDiet == AnimalDiet.Carnivore 
       && animal.Size <= carriageAnimal.Size 
       || animal.AnimalDiet == AnimalDiet.Carnivore 
       && animal.Size > carriageAnimal.Size)
    {
        return false;
    }

    else
    {
        return true;
    }
}

So it doesnt know carriageAnimal in my new method

TallTed
  • 9,069
  • 2
  • 22
  • 37
Im__Ruben
  • 9
  • 6
  • You must be getting compilation error. Also pass `carriageAnimal` to method `CheckIfAnimalFits` function. i.e. `CheckIfAnimalFits (animal, carriageAnimal)` and defined method as `CheckIfAnimalFits(Animal animal, Animal carriageAnimal)` – Satpal May 14 '19 at 06:57
  • @Satpal thanks indeed it was as easy as passing both. And no im not having any compilation errrors why? – Im__Ruben May 14 '19 at 07:00
  • `if (CheckIfAnimalFits == false) { return false; }` should be `return CheckIfAnimalFits(carriageAnimal);` – Seabizkit May 14 '19 at 07:13
  • `Animal : Animals` please show the relationship, you are mixing names which should not be possiable, so show all the code. – Seabizkit May 14 '19 at 07:41

1 Answers1

0

When you say your new method doesn't know carriageAnimal, you should look where that variable originally comes from: it's the foreach variable. Thus you have to pass it to your new function as well. Try this:

public bool AddAnimaltoWagon(Animal animal)
{
    if (CheckWagonFull(animal) == true ) { return false; }

    foreach (Animal carriageAnimal in Animals)
    {
        if (CheckIfAnimalFits(carriageAnimal, animal) == false)
        {
            return false;
        }
    }

    Animals.Add(animal);
    return true;
}

public bool CheckIfAnimalFits(Animal carriageAnimal, Animal animal)
{
    if (carriageAnimal.AnimalDiet == AnimalDiet.Carnivore && animal.Size <= carriageAnimal.Size || animal.AnimalDiet == AnimalDiet.Carnivore && animal.Size > carriageAnimal.Size)
    {
        return false;
    }
    else
    {
        return true;
    }
}
Torben Schramme
  • 2,104
  • 1
  • 16
  • 28