这对我来说是个愚蠢的问题,但我只是难倒。
我从数据库中检索数据,为从数据库中获取的每一行数据创建一个对象,并将该对象添加到List中。
问题是,每次我将新对象添加到List时,列表中已有的所有其他对象都会更改"匹配新添加的。
即。如果我获得的数据(比如姓名)是: 本/佛瑞德/冬青
我创建了一个新对象并每次添加到列表中,列表将按如下方式进行:
(第一次迭代) 本
(第二次迭代) 弗雷德 佛瑞德
(第三次迭代) 冬青 冬青 冬青
我知道对此的常见答案是我没有创建新对象而只是修改现有对象,但我创建了一个新对象。这是代码:
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;
}
有什么想法吗?