添加到类中的列表

我有这门课

public class User { private string _name; public string UserName { get; set; } public List ControlNumber { get; set; } public User (string username) { _name = username; } public User() { } } 

而这个function填补了这个阶级。

 User UserClass = new User(e.Key); //e.Key = user's name public static void FillUserListClass(DataTable dt, ref UserClass) { try { for (int ctr = 0; ctr < dt.Rows.Count; ctr++) { var row = dt.Rows[ctr]; var userName = row["User"].ToString(); if (UserList.ContainsKey(userName)) { UserList[userName].Add(Convert.ToInt32(row["ControlNumber"])); } else { _user.UserName = row["User"].ToString(); _user.ControlNumber.Add(Convert.ToInt32(row["ControlNumber"])); } //print out Console.WriteLine("UserList Class: "); Console.WriteLine(_user.UserName); Console.WriteLine(_user.ControlNumber); } } finally { //conn.Close(); } } 

但是,在_user.ControlNumber.Add(Convert.ToInt32(row["ControlNumber"])); 我得到“对象引用未设置为对象的实例”。 错误。 有帮助吗?

我要做的是为每个用户创建一个包含用户控件号的类。 然后我希望将所有这些类放入字典中以供参考。

您需要在构造函数中初始化列表:

  public User (string username) : this() { _name = username; } public User() { this.ControlNumber = new List(); } 

否则, ControlNumber的默认值为null。

您尚未初始化ControlNumber ,您可以在构造函数中执行此操作

 public User (string username) { _name = username; ControlNumber = new List(); } 

或者在您尝试Add之前

 _user.ControlNumber = new List(); _user.ControlNumber.Add(Convert.ToInt32(row["ControlNumber"])); 

我希望这有帮助。

确保在使用之前初始化列表!

更正用户类:

 public class User { private string _name; public string UserName { get; set; } public List ControlNumber { get; set; } public User (string username) : this() { _name = username; } public User() { ControlNumber = new List(); } } 

而且,在将row["ControlNumber"]转换为整数之前,您应该确保它不是null。

 if (row["ControlNumber"] != null) { user.ControlNumber.Add(Convert.ToInt32(row["ControlNumber"])); } 

默认情况下, ControlNumber属性设置为null

在构造函数中,执行以下操作将其初始化为空列表:

 this.ControlNumber = new List(); 

我讨厌在构造函数中设置属性,所以我所做的是:

 private List _controlNumber; public List ControlNumber { get { if (_controlNumber == null) _controlNumber=new List(); return _controlNumber; } set { _controlNumber = value } } 

或简单地说

 private List _controlNumber = new List(); public List ControlNumber { get { return _controlNumber; } set { _controlNumber = value } } 

你定义了_user吗? 我在你的例子中没有看到它。