私は持ってい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ビューにバインドされているため、新しいリストを作成できません。アイテムを削除する代わりに作成すると、目に見える不具合が発生します。
これを行うためのより良い/より速い方法はありますか?