添加到类中的列表

时间:2013-06-06 15:55:06

标签: c# list class

我有这个班级

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"]));行,我得到“对象引用未设置为对象的实例”。错误。有什么帮助吗?

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

6 个答案:

答案 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吗? 我在你的例子中没有看到它。