gpt4 book ai didi

c# - 尝试转换 listbox.selecteditem 时为空引用?

转载 作者:行者123 更新时间:2023-11-30 17:37:49 26 4
gpt4 key购买 nike

所以为了完成一项学校作业,我必须 build 一个动物收容所,

有两个对象:Cats 和 Dogs,对象的每个新实例都被添加到对象列表中,如下所示:

    public Cat Cat { get; private set; }
public Dog Dog { get; private set; }
public List<Dog> Dogs = new List<Dog>();
public List<Cat> Cats = new List<Cat>();

public void NewCat(string name, Gender gender, string badHabits)
{
this.Cat = new Cat(name, gender, badHabits);
Cats.Add(this.Cat);

}

public void NewDog(string name, Gender gender)
{
this.Dog = new Dog(name, gender);
Dogs.Add(this.Dog);
}

使用更新方法,两个列表都添加到这样的列表框中:

  private void Update()
{
lbAnimals.Items.Clear();
lbAnimals.Items.Clear();
foreach (Cat c in reservations.Cats)
{
lbAnimals.Items.Add(c.ToString());
}
foreach (Dog d in reservations.Dogs)
{
lbAnimals.Items.Add(d.ToString());
}
}

最后我需要将列表框中的选定对象转换为 Dog 对象或 cat 对象,这是为狗完成的方式:

 private void btnReserveDog_Click(object sender, EventArgs e)
{
if (this.reservations.Dog != null)
{
var d= lbAnimals.SelectedItem as Dog;
d.Reserve(txtReservor.Text);
this.btnReserveDog.Enabled = false;
Update();
}
}

无论我尝试什么,当我转换对象时它返回一个空引用,我不知道为什么,任何帮助将不胜感激!

最佳答案

ListBox 的项目集合将接受任何类型的对象。您目前正在将对象从 CatDog 转换为 string 添加之前,当然当您使用 as并尝试将 string 转换回 Dog,但失败了。 Dog 不是 string,这意味着您得到 null 作为结果(这就是 as 在转换失败)。

您需要做的就是删除 .ToString()。即:

private void Update()
{
lbAnimals.Items.Clear();
lbAnimals.Items.Clear();
foreach (Cat c in reservations.Cats)
{
lbAnimals.Items.Add(c);
}
foreach (Dog d in reservations.Dogs)
{
lbAnimals.Items.Add(d);
}
}

然后,当您处理集合中的 Dog 元素时,您将在使用 as 时取回 Dog 实例。

当然,对于 Cat 元素,结果将为 null。您仍然需要确保处理 null 值(当它是 Cat 时不尝试转换为 Dog,反之亦然反之亦然,或者通过检查 null 结果)。

关于c# - 尝试转换 listbox.selecteditem 时为空引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37379112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com