在我继承的非常老的代码库中,有一个带有此签名的方法
public static void Remove<TSource>(this ICollection<TSource> source, Func<TSource, bool> predicate)
我正在尝试在数组上调用此方法。该数组名为Items,是节的属性
section.Items.Remove(// what goes here?)
商品是一系列产品。
为清楚起见,这是Remove方法
public static void Remove<TSource>(this ICollection<TSource> source, Func<TSource, bool> 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);
}
}
}
答案 0 :(得分:8)
您需要传递一个lambda来过滤要删除的内容(如果参数和函数的名称是逻辑的)
例如:
SELECT (SELECT token +'.'
FROM dbo.NGrams8k('DOG',1)
ORDER BY position
FOR XML PATH(''))
这应该删除ID为1的所有项目(假设存在这样的属性)
注意,由于无法调整数组大小,因此很难确切说明该方法的作用。该方法采用section.Items.Remove(p => p.Id == 1);
,可以删除项目,但是您说您传入了数组。调用ICollection
时,该数组将产生错误。
修改
自从您发布了该方法的代码以来,我可以肯定地说该方法对于数组将失败。它将适用于其他ICollection.Remove
实现(例如ICollection
)。
只需指出,我不会真正使用此方法来删除大型集合中的许多元素,因为该方法将再次迭代该集合以删除每个对象。更不用说它将分配一个新的数组来复制整个集合(大型集合的噩梦)。