未设置为对象实例的对象引用.c#
本文关键字:对象引用 实例 对象 设置 | 更新日期: 2023-09-27 18:15:17
我可以从数据库中获取记录并将其作为对象
for (int i = 0; i < selectedFishes.Length; i++)
{
string stm = "SELECT * FROM Data WHERE name='" + selectedFishes[i] + "'";
SQLiteCommand cmd = new SQLiteCommand(stm, conn);
SQLiteDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
fish[i] = new fish(rdr.GetString(0), rdr.GetDouble(1), rdr.GetDouble(2), rdr.GetDouble(3), rdr.GetDouble(4));
Console.WriteLine(fish[i].name + " " + fish[i].value1 + " " + fish[i].value2 + " " + fish[i].value3 + " " + fish[i].value4);//it can be displayed into console
}
}
MessageBox.Show(selectedFishes.Length.ToString()+" "+fish.Length.ToString());//results are same if the value >5 cant be displayed
for (int i = 0; i < fish.Length; i++)
{
Console.WriteLine(fish[i].name + " " + fish[i].value1 + " " + fish[i].value2 + " " + fish[i].value3 + " " + fish[i].value4);
}
为什么不能显示?错误是"对象引用未设置为对象的实例"由于之前
我大胆猜测selectedFishes.Length
可能不等于fish.Length
。确切地说,前者很可能比后者少。
这意味着您只为索引0到selectedFishes.Length-1
创建对象,然后尝试访问索引selectedFishes.Length
(仍然是null
)并导致该异常。
要解决这个问题,您可以更改第二个for循环的上界,或者在其中执行null检查。
编辑:你真的想让while循环在第一个for循环吗?i
在while循环中不会改变,所以可以继续将fish
对象添加到相同的数组索引中。
我会说总是在NullReferenceException中尝试ToString()每个您期望有值的对象
按f9在第二个控制台写行中添加一个断点。按f5。让程序到达断点。检查name或value1-4是否为空。添加处理空值的代码。