如何在自定义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
相关产品推荐
相关产品推荐

