在 lambda 表达式中添加事件

本文关键字:添加 事件 表达式 lambda | 更新日期: 2023-09-27 17:56:41

我有items列表,并且要求如果提供了itemId,则从列表中删除该ID的所有项目。这意味着,同一 id 的列表中可以有多个项目。

private List<CartItem> items;
public void Remove(CartItem item)
{
    items.Remove(item);
    this.ItemRemoved(item); // This is call to an event whenever an item is removed from list.
}

As Remove函数从列表中删除一个项目并引发事件。每当删除多个项目时,我都想这样做。

public void RemoveAll(int itemId)
{
    items.RemoveAll(item => item.ID == itemId); // Event here...
}

在这里,我想添加事件,以便每当删除多个项目时,都可以为单个项目引发事件。如何在 Lambda 表达式中添加事件代码?

还是有其他办法?

当我尝试这样做时,编译器给了我一个错误:

items.RemoveAll(item => { this.ItemRemoved(item); item.ID == itemId; });

错误:

Not all code paths return a value in lambda expression of type 'System.Predicate<ShoppingCart.ShoppingCart.Items.CartItem>'

这是我的活动:

public event ItemRemoved ItemRemoved; // ItemRemoved is a delegate.

谢谢!

在 lambda 表达式中添加事件

尝试

items.RemoveAll(item => 
{
 if (item.ID == itemId) 
 { 
   // raise the event only for the items to be removed.
   this.ItemRemoved(item); 
   return true;
 }
 return false;
);

默认情况下,lambda 表达式是单行返回语句。

对于多行,我们需要将其视为任何匿名委托,这意味着代码块需要为 RemoveAll 方法显式返回布尔值。