对我有ObservableCollection a
和List b
从名字出现其他列表
现在我想从集合中删除有其表b
相当于a
元素的ObservableCollection项目中移除。
我的代码在这一刻:
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视图,并且如果我这样做而不是删除项目,将会出现可见的毛刺。
有没有更好/更快的方式做到这一点?
你的问题到底是什么? –
抱歉,更新 – Adassko
我想不出一个更好的方法。你必须坚持这种方法。可能有人带来更好的解决方案:) –