为什么我的清单是空的?

时间:2015-09-27 14:54:21

标签: c# list

班级管理:

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

所以在这里,我只是轻易地说明方法是否正确,创造动物。如果它是假的,不要添加动物。

问题:如果我将动物添加到列表中,列表始终为空。好像它不断刷新/清除列表一样。我在这里做错了什么?

希望这种方式可以理解,否则请告诉我!

3 个答案:

答案 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,因此该项目已添加