我有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.
}
当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.
谢谢!
答案 0 :(得分:1)
尝试
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
方法显式返回一个布尔值。