1

我希望动态创建对象并将其保存到列表中。当程序到达add在列表中添加对象的方法时,我得到一个错误:

你调用的对象是空的。

我在这里做错了什么?

List<Category> categoryList;

public Main(string firstname, string lastname, string status)
{
    InitializeComponent();
    label1.Text = (firstname + lastname + status).Trim();

    string connection = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Trgovina.mdf;Integrated Security=True";
    SqlConnection cn = new SqlConnection(connection);

    try
    {
        cn.Open();
    }
    catch (Exception) { MessageBox.Show("Error occurred during database communication!"); }

    string sqlQuery = "SELECT * FROM Kategorije_art";
    SqlCommand categoryCommand = new SqlCommand(sqlQuery, cn);
    SqlDataReader categoryDataRead = categoryCommand.ExecuteReader();

    categoryList.Add(new Category(1, "a")); //ERROR ?!
}
4

6 回答 6

7

您必须实际创建List实例

List<Category> categoryList= new List<Category>();

在第一行。

于 2013-02-05T16:52:45.993 回答
4

您的成员 categoryList 未初始化。

尝试:

List<Category> categoryList = new List<Category>();

public Main(string firstname, string lastname, string status)
{
    InitializeComponent();
    label1.Text = (firstname+lastname+status).Trim();

    string connection = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Trgovina.mdf;Integrated Security=True";
    SqlConnection cn = new SqlConnection(connection);

    try 
    {
        cn.Open();
    }
    catch (Exception) { MessageBox.Show("Error occurred during database communication!"); }

    string sqlQuery = "SELECT * FROM Kategorije_art";
    SqlCommand categoryCommand = new SqlCommand(sqlQuery, cn);
    SqlDataReader categoryDataRead = categoryCommand.ExecuteReader();

    categoryList.Add(new Category(1, "a")); //ERROR ?!
}

另请注意,您可能应该将 SqlConnection 放在 using 块中,或者至少在其上调用 Close/Dispose,这样您就不会泄漏连接。

于 2013-02-05T16:54:38.410 回答
2

categoryList的没有初始化。将第一行更改为:

List<Category> categoryList = new List<Category>();

当您尝试访问.Add(...)空值的方法时,会出现空引用异常。

于 2013-02-05T16:52:41.767 回答
1

您的错误行应如下所示:

categoryList = new List<Category>() { new Category(1,"a")};

所以您创建列表并添加一个创建的元素并将对该列表的引用存储在categoryList

于 2013-02-05T17:13:45.117 回答
1

您命名categoryList的变量未初始化。所以它是空的。

您不能在未初始化的变量上调用任何方法。

尝试 :

List<Category> categoryList= new List<Category>();
于 2013-02-05T16:53:08.833 回答
1

你创造categoryList = new List<Category>()吗?

于 2013-02-05T16:53:18.560 回答