對我有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
我想不出一個更好的方法。你必須堅持這種方法。可能有人帶來更好的解決方案:) –