班级管理:
namespace AnimalShelter
{
class Administration
{
private List<Animal> animalList;
public Administration()
{
animalList = new List<Animal>();
}
public bool AddAnimal(Animal animal)
{
bool status = false;
foreach (Animal TempAnimal in animalList)
{
if (TempAnimal.ChipRegistrationNumber == animal.ChipRegistrationNumber)
{
status = false;
}
else
{
status = true;
animalList.Add(animal);
}
}
return status;
}
正如你在这里看到的,我已经制作了一个列表,在构造函数中初始化它。
在AddAnimal方法中,如果数字与另一个相同,我将遍历列表。如果数字匹配,则无法添加具有该特定ChipNumber的其他动物。
现在我的表格:
private Administration administration;
public AdministrationForm()
{
administration = new Administration();
}
private void btnCreateAnimal_Click(object sender, EventArgs e)
{
Animal cat1 = new Cat(params..);
if (administration.AddAnimal(cat1))
{
MessageBox.Show("Following animal has succesfully been
added: " + Environment.NewLine + cat1.ToString());
}
else
{
MessageBox.Show("Animal with this chipnumber already exists.
Please Choose another one.");
}
}
所以在这里,我只是轻易地说明方法是否正确,创造动物。如果它是假的,不要添加动物。
问题:如果我将动物添加到列表中,列表始终为空。好像它不断刷新/清除列表一样。我在这里做错了什么?
希望这种方式可以理解,否则请告诉我!
答案 0 :(得分:1)
因为列表在创建后是空的,并且当您添加第一个动物foreach
从未执行时,因为列表中没有任何内容。替换为:
public bool AddAnimal(Animal animal)
{
bool status = true;
foreach (Animal TempAnimal in animalList)
{
if (TempAnimal.ChipRegistrationNumber == animal.ChipRegistrationNumber)
{
status = false;
}
else
{
status = true;
}
}
if (status)
{
animalList.Add(animal);
}
return status;
}
使用linq我们可以缩短它:
public bool AddAnimal(Animal animal)
{
if (!animalList.Any(a => a.ChipRegistrationNumber == animal.ChipRegistrationNumber))
{
animalList.Add(animal);
return true;
}
return false;
}
答案 1 :(得分:1)
您需要在foreach循环外移动添加方法
public bool AddAnimal(Animal animal)
{
bool status = false;
foreach (Animal TempAnimal in animalList)
{
if (TempAnimal.ChipRegistrationNumber == animal.ChipRegistrationNumber)
{
status = false;
}
else
{
status = true;
}
}
if(status)
animalList.Add(animal);
return status;
}
答案 2 :(得分:1)
您根本不需要status
。简单就是更好。
public bool AddAnimal(Animal animal)
{
foreach (Animal TempAnimal in animalList)
if (TempAnimal.ChipRegistrationNumber == animal.ChipRegistrationNumber) return false;
animalList.Add(animal);
return true;
}
这相当于有两种方法:
public bool IsDuplicate(Animal animal)
{
foreach (Animal TempAnimal in animalList)
if (TempAnimal.ChipRegistrationNumber == animal.ChipRegistrationNumber) return true;
return false;
}
public bool AddAnimal(Animal animal)
{
if (IsDuplicate(animal)) return false;
animalList.Add(animal);
return true;
}
如果已添加项目,则 Add
返回true;如果存在重复项,则返回false,因此该项目已添加不。