C# 向List添加对象出现重复,数据库无重复记录该如何解决
问题原因
你的问题核心出在Events类的字段声明上:所有成员字段都加了static修饰符。static修饰的字段属于类层级的共享资源,不会随着类的实例化创建独立副本,所有Events类的实例都会共用同一组静态字段的存储空间。你在循环中每次创建新的Events对象时,构造函数赋值都会覆盖这组共享值,最终列表内所有实例读取属性时,拿到的都是最后一次构造时写入的字段值,因此看起来全是重复的相同对象。
修复方案
删除Events类所有私有字段前的static修饰符即可,修正后的代码如下:
public class Events { // 移除所有static修饰,让字段成为实例专属的成员 private int _ID; private string _Type; private int _UserID; private int _LokaalID; private DateTime _Created_On; public Events(int id, string type, int UserID, int LokaalID, DateTime Created_On) { _ID = id; _Type = type; _UserID = UserID; _LokaalID = LokaalID; _Created_On = Created_On; } public int ID { get { return _ID; } } public string Type { get { return _Type; } } public int UserID { get { return _UserID; } } public int LokaalID { get { return _LokaalID; } } public DateTime Created_On { get { return _Created_On; } } }
额外优化建议
你的数据库操作代码建议补充using语句自动释放资源,避免连接泄漏,修改后的GetEvents参考代码:
private List<Events> GetEvents() { List<Events> dataEvents = new List<Events>(); using (MySqlConnection con = new MySqlConnection(cs)) { con.Open(); string sql = "SELECT * FROM Events"; using (var cmd = new MySqlCommand(sql, con)) { using (MySqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read()) { Events x = new Events(rdr.GetInt32(0), rdr.GetString(1), rdr.GetInt32(2), rdr.GetInt32(3), rdr.GetDateTime(4)); dataEvents.Add(x); } } } } return dataEvents; }
内容的提问来源于stack exchange,提问作者billion
相关产品推荐
相关产品推荐

