我有ObservableCollection a
和List b
现在我想从a
在 list 中具有等价物的集合元素中删除b
。
我此时的代码:
public static void CrossRemove<TFirst, TSecond>(this ObservableCollection<TFirst> collection, IEnumerable<TSecond> secondCollection, Func<TFirst, TSecond, bool> predicate)
{
collection.Where(first => secondCollection.Any(second => predicate(first, second)))
.ToList().ForEach(item => collection.Remove(item));
}
用法:
ObservableCollection<string> first = new ObservableCollection<string> { "1", "2", "3", "4", "5", "6", "k" };
IEnumerable<int> second = new List<int> { 2, 3, 5 };
first.CrossRemove(second, (x, y) => x == y.ToString());
此代码从集合中删除“2”、“3”和“5”,留下“1”、“4”、“6”和“k”。
在我的真实代码中a
并b
包含从相同继承的元素,interface
我正在比较该接口中的属性,但我无法利用它。
我无法创建新列表,因为它绑定到 wpf 视图,如果我这样做而不是删除项目,将会出现明显的故障。
有没有更好/更快的方法来做到这一点?