在 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.
谢谢!
尝试
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
方法显式返回布尔值。