You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:03