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如果某个对象是静态的,那么根据定义,声明它的类的所有实例都会共享它。