C#对象被复制到List <t>中

时间:2018-04-11 08:07:40

标签: c# winforms

这对我来说是个愚蠢的问题,但我只是难倒。

我从数据库中检索数据,为从数据库中获取的每一行数据创建一个对象,并将该对象添加到List中。

问题是,每次我将新对象添加到List时,列表中已有的所有其他对象都会更改&#34;匹配新添加的。

即。如果我获得的数据(比如姓名)是: 本/佛瑞德/冬青

我创建了一个新对象并每次添加到列表中,列表将按如下方式进行:

(第一次迭代) 本

(第二次迭代) 弗雷德 佛瑞德

(第三次迭代) 冬青 冬青 冬青

我知道对此的常见答案是我没有创建新对象而只是修改现有对象,但我创建了一个新对象。这是代码:

List<Classes.User> users = new List<Classes.User>();            
        try
        {
            using(SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connString"].ConnectionString))
            {
                string query = "SELECT * FROM BenPoint_Users WHERE iEnabled=" + enabled;
                conn.Open();
                SqlCommand command = new SqlCommand(query, conn);
                SqlDataReader reader = command.ExecuteReader();
                if(reader.HasRows)
                {
                    while(reader.Read())
                    {
                        Classes.User user = new Classes.User();
                        user.UserID = Convert.ToInt32(reader["iUserID"].ToString());
                        user.UserName = reader["sUsername"].ToString().Trim();
                        user.EmailAddress = reader["sEmailAddress"].ToString().Trim();
                        user.DateCreated = Convert.ToDateTime(reader["dDateCreated"].ToString());
                        if (reader["dExpired"] != DBNull.Value)
                            user.DateExpired = Convert.ToDateTime(reader["dExpired"].ToString());
                        user.IsEnabled = Convert.ToBoolean(reader["iEnabled"]);
                        user.UserType = reader["sType"].ToString().Trim();
                        users.Add(user);
                    }
                }
                reader.Close();
                conn.Close();
                command.Dispose();
            }
            return users;
        }
        catch(SqlException)
        {
            throw;
        }

有什么想法吗?

0 个答案:

没有答案