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