-3

我可以从数据库中获取记录并将其放入对象中

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);

}

为什么不能显示?错误是“对象引用未设置为对象的实例”谢谢之前

4

3 回答 3

3

我在胡乱猜测并说这selectedFishes.Length可能不等于fish.Length. 准确地说,前者很可能比后者少。

这意味着您只为索引 0 创建对象,selectedFishes.Length-1然后尝试访问selectedFishes.Length仍然存在的索引null并导致该异常。

要解决此问题,您可以更改第二个 for 循环的上限或在其中进行 null 检查。

编辑:你真的想要第一个 for 循环中的 while 循环吗?i在 while 循环内不会更改,因此您可以继续将fish对象添加到相同的数组索引中。

于 2013-05-26T08:52:34.170 回答
1

我会说总是在 NullReferenceException 中尝试 ToString() 每个您期望具有值的对象。

于 2013-12-05T19:34:00.910 回答
0

按 f9 将断点添加到第二个控制台写入行。按 f5。让你的程序到达断点。检查 ifname 或 value1-4 是否为空。添加代码以处理空值。

于 2013-05-26T08:55:04.523 回答