我有这个班级
public class User
{
private string _name;
public string UserName { get; set; }
public List<int> ControlNumber { get; set; }
public User (string username)
{
_name = username;
}
public User()
{
}
}
这个功能填补了这个类。
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"]));
行,我得到“对象引用未设置为对象的实例”。错误。有什么帮助吗?
我要做的是为每个包含用户控件号的用户创建一个类。然后我希望将所有这些类放入字典中以供参考。
答案 0 :(得分:16)
您需要在构造函数中初始化列表:
public User (string username) : this()
{
_name = username;
}
public User()
{
this.ControlNumber = new List<int>();
}
否则,ControlNumber
的默认值为null。
答案 1 :(得分:2)
确保在使用之前初始化列表!
更正用户类:
public class User
{
private string _name;
public string UserName { get; set; }
public List<int> ControlNumber { get; set; }
public User (string username) : this()
{
_name = username;
}
public User()
{
ControlNumber = new List<int>();
}
}
此外,在将row["ControlNumber"]
转换为整数之前,您应确保它不为空。
if (row["ControlNumber"] != null)
{
user.ControlNumber.Add(Convert.ToInt32(row["ControlNumber"]));
}
答案 2 :(得分:2)
您尚未初始化ControlNumber
,您可以在构造函数中执行此操作,如
public User (string username)
{
_name = username;
ControlNumber = new List<int>();
}
或在您尝试Add
_user.ControlNumber = new List<int>();
_user.ControlNumber.Add(Convert.ToInt32(row["ControlNumber"]));
我希望这会有所帮助。
答案 3 :(得分:1)
默认情况下,您的ControlNumber
属性设置为null
。
在构造函数中,执行以下操作将其初始化为空列表:
this.ControlNumber = new List<int>();
答案 4 :(得分:1)
我讨厌在构造函数中设置属性,所以我所做的是:
private List<int> _controlNumber;
public List<int> ControlNumber {
get {
if (_controlNumber == null)
_controlNumber=new List<int>();
return _controlNumber;
}
set { _controlNumber = value }
}
或只是
private List<int> _controlNumber = new List<int>();
public List<int> ControlNumber {
get { return _controlNumber; }
set { _controlNumber = value }
}
答案 5 :(得分:0)
您定义了_user
吗?
我在你的例子中没有看到它。