作者:美丽空间wo | 来源:互联网 | 2022-12-03 09:22
在我继承的一个非常古老的代码库中,有一个带有此签名的方法
public static void Remove(this ICollection source, Func predicate)
我试图在一个数组上调用此方法.该数组名为Items,是一个section的属性
section.Items.Remove(// what goes here?)
Items是一系列产品.
为清楚起见,这是Remove方法
public static void Remove(this ICollection source, Func predicate)
{
var items = source.ToArray();
for (var index = items.Length - 1; index >= 0; index--)
{
var item = items[index];
if (predicate.Invoke(item))
{
source.Remove(item);
}
}
}
Titian Cerni..
8
您需要传入一个lambda来过滤被删除的内容(如果参数和函数的名称是逻辑的)
例如:
section.Items.Remove(p => p.Id == 1);
这应该删除Id为1的所有项目(假设存在这样的属性)
注意由于数组无法调整大小,因此很难确切地说该方法的作用.该方法采用ICollection
可删除项目的方法但您说您传入数组.ICollection.Remove
调用时,数组会出错 .
编辑
由于您发布了该方法的代码,我可以肯定地说该方法对于数组会失败.它适用于其他ICollection
实现(List
例如).
只是要指出我不会真正使用此方法从大型集合中删除大量元素,因为该方法将再次迭代集合以删除每个对象.更不用说它将分配一个新的数组来复制整个集合(为大型集合打造噩梦).
1> Titian Cerni..:
您需要传入一个lambda来过滤被删除的内容(如果参数和函数的名称是逻辑的)
例如:
section.Items.Remove(p => p.Id == 1);
这应该删除Id为1的所有项目(假设存在这样的属性)
注意由于数组无法调整大小,因此很难确切地说该方法的作用.该方法采用ICollection
可删除项目的方法但您说您传入数组.ICollection.Remove
调用时,数组会出错 .
编辑
由于您发布了该方法的代码,我可以肯定地说该方法对于数组会失败.它适用于其他ICollection
实现(List
例如).
只是要指出我不会真正使用此方法从大型集合中删除大量元素,因为该方法将再次迭代集合以删除每个对象.更不用说它将分配一个新的数组来复制整个集合(为大型集合打造噩梦).