C# 正在复制到列表中的C对象

C# 正在复制到列表中的C对象,c#,winforms,C#,Winforms,这对我来说是个愚蠢的问题,但我只是被难倒了 我从数据库中检索数据,为从数据库获得的每行数据创建一个对象,并将该对象添加到列表中 问题是,每次我将新对象添加到列表中时,列表中已经存在的所有其他对象都会发生更改,以匹配正在添加的新对象 也就是说,如果我获得的数据是: 本/弗雷德/霍莉 我每次创建一个新对象并添加到列表中,列表将按如下方式进行: 第一次迭代 本 第二次迭代 弗莱德 弗雷德 第三次迭代 冬青 冬青 冬青树 我知道常见的答案是,我不是在创建新对象,而是在修改现有对象,但我确实创建了一个新对

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

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

问题是,每次我将新对象添加到列表中时,列表中已经存在的所有其他对象都会发生更改,以匹配正在添加的新对象

也就是说,如果我获得的数据是: 本/弗雷德/霍莉

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

第一次迭代 本

第二次迭代 弗莱德 弗雷德

第三次迭代 冬青 冬青 冬青树

我知道常见的答案是,我不是在创建新对象,而是在修改现有对象,但我确实创建了一个新对象。代码如下:

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;
        }

有什么想法吗?

请展示课堂。用户课堂。我打赌你有静态成员。类的定义是什么。用户?唯一合乎逻辑的解释是你的类。用户有静态属性/字段。该死的。是的,它们都是静电的!很明显,我现在要改了,我不记得当初为什么把它们设为静态。即使我正在创建一个新对象,有人能解释为什么会发生这种情况吗?@BennyO'Neill如果某个对象是静态的,那么根据定义,声明它的类的所有实例都会共享它。