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

如何在自定义List的OnAdd事件中读取新增的对象参数?

如何在自定义泛型列表的OnAdd事件中获取新增对象

要在myListUsers_OnAdd方法里拿到新增的connectedUser对象,核心是自定义一个带泛型参数的事件参数类,替换掉默认的EventArgs,这样就能把新增的item传递到事件处理方法里了。咱们一步步来修改:

1. 自定义泛型事件参数类

首先创建一个继承自EventArgs的泛型类,用来携带新增的对象:

public class MyListAddEventArgs<T> : EventArgs
{
    // 存储新增对象的属性
    public T AddedItem { get; }

    public MyListAddEventArgs(T item)
    {
        AddedItem = item;
    }
}

2. 修改MyList的事件定义和Add方法

把原来的EventHandler事件改成EventHandler<MyListAddEventArgs<T>>,并且在触发事件时传入自定义的参数:

class MyList<T> : List<T>
{
    // 修改事件类型为自定义的泛型EventHandler
    public event EventHandler<MyListAddEventArgs<T>> OnAdd;

    public new void Add(T item) // 用new关键字明确覆盖基类的Add方法
    {
        // 用?.Invoke()简化null判断,触发事件时传入新增的item
        OnAdd?.Invoke(this, new MyListAddEventArgs<T>(item));
        base.Add(item);
    }
}

这里用new覆盖基类方法更贴合你的场景,?.Invoke()是C# 6+的简化写法,比手动判断null更简洁安全。

3. 修改事件注册和处理方法

现在事件处理方法就能接收带新增对象的参数了,直接从事件参数里取出AddedItem即可:

// 实例化自定义列表
MyList<connectedUser> myListUsers = new MyList<connectedUser>();
// 注册事件(可以用简化写法)
myListUsers.OnAdd += myListUsers_OnAdd;

// 事件处理方法
private void myListUsers_OnAdd(object sender, MyListAddEventArgs<connectedUser> e)
{
    // 这里就能直接拿到新增的connectedUser对象了!
    connectedUser newUser = e.AddedItem;
    // 可以直接使用对象的属性
    Console.WriteLine($"新增用户ID:{newUser.userID},关联市场ID:{newUser.marketID}");
}

// 你的connectedUser类保持不变
public class connectedUser
{
    public string userID { get; set; }
    public string marketID { get; set; }
}

这样当你调用myListUsers.Add(new connectedUser { userID = "U001", marketID = "M002" })时,myListUsers_OnAdd方法里就能直接获取到这个新增的对象,做后续的业务处理了。

内容的提问来源于stack exchange,提问作者Fraz Zaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:18:35