将 C# 代码拆分为 2 个方法,使其更加可靠

Split C# code into 2 methods to be more SOLID

我正在尝试将我当前的代码重写为(参见示例 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 我的新方法

当您说您的新方法不知道 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;
    }
}