以编程方式创建多个User类

本文关键字:User 创建 编程 方式 | 更新日期: 2023-09-27 18:16:35

首先,我有这个遍历用户字典的which foreach循环。'int'值是一个订单列表("ControlNumber")。

foreach (KeyValuePair<string, int> e in errorOrders)
        {
            //finds error percentage for user
           errPercentage = GetErrPercentage(e.Key);
           Console.WriteLine("Percentage of errors for " + e.Key + ": " + Math.Round(errPercentage, 2) * 100 + "%");
            //finds orderPerHour for user
           ordersPerHour = OrdersPerHour(e.Key);
            //Selects random orders for user based on errPercentage, saves to DT "randomOrders"
           RandomOrders = RandomSelect(errPercentage, e.Key);
           Console.WriteLine("Number of orders pulled : " + RandomOrders.Rows.Count);
           //Print out orders randomly collected
           for (int i = 0; i < RandomOrders.Rows.Count; i++)
           {
               Console.WriteLine(RandomOrders.Rows[i]["ControlNumber"]);
           }
           Console.WriteLine("'r'n");
            //Creates class and fills class for each user
           FillUserListClass(RandomOrders);
         }

下面的部分是FillUserListClass函数。这就是我的麻烦出现的地方。现在,我在下面的函数的最后一行收到一个错误("对象引用未设置为对象的实例。")。其中它试图将"ControlNumber"添加到UserList[username]类。

现在,我愿意听取关于改变这个功能的建议。从本质上讲,我想为每个用户创建一个类,并在这个类中保存一个包含每个用户的"ControlNumbers"的列表。

我让别人尝试用LINQ做这件事,但因为那东西在我头上,我无法解决它。(如果你认为这是最好的方法,我将把LINQ代码也放在这里)

public static void FillUserListClass(DataTable dt)
    {
       Dictionary<string, List<int>> UserList = new Dictionary<string, List<int>>();
        {

            foreach (DataRow row in dt.Rows)
            {
                object value = row["ControlNumber"];
                if (value == DBNull.Value)
                {
                    row.Delete();
                }
            }
            for (int ctr = 1; 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
                {
                    UserList.Add(row["User"].ToString(), null);
                    UserList[userName].Add(Convert.ToInt32(row["ControlNumber"]));
                }
            }
}

如果你需要它,这是我想要填充的User类

 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类

您看到此错误是因为您在字典中插入了List<int>null值,然后立即尝试向其中添加项。

尝试替换

UserList.Add(row["User"].ToString(), null);
UserList[userName].Add(Convert.ToInt32(row["ControlNumber"]));
与这个:

UserList.Add(userName, new List<int>());
UserList[userName].Add(Convert.ToInt32(row["ControlNumber"]));

或者更好:

UserList.Add(userName, new List<int>() { Convert.ToInt32(row["ControlNumber"]) });