Разделите код C # на 2 метода, чтобы быть более твердыми - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь переписать мой текущий фрагмент кода (см. Пример 0. Но он не знает о переносчике в моем методе CheckIfAnimalFits. Как бы это исправить, не перемещая весь foreach в метод

Текущий код

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;
}

пытается получить

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;
    }
}

Так что он не знает carriageAnimal в моем новом методе

1 Ответ

0 голосов
/ 14 мая 2019

Когда вы говорите, что ваш новый метод не знает carriageAnimal, вы должны посмотреть, откуда взялась эта переменная: это переменная foreach. Таким образом, вы также должны передать его новой функции. Попробуйте это:

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;
    }
}
...