.NET 4.x Сравнение коллекций и последующая модификация - C#
Формулировка задачи:
Есть 2 коллекции
Из второй коллекции удалили один айтем, как синхронизировать 2 коллекции? Т.е. и в первой удалить этот айтем?
ObservableCollection<CollectionItem> CollectionOne
и ObservableCollection<CollectionItem> CollectionTwo
содержащие по 5 айтемов.
Листинг программы
- public class CollectionItem()
- {
- public string Name {get;set;}
- public object SomeData {get;set;}
- }
Решение задачи: «.NET 4.x Сравнение коллекций и последующая модификация»
textual
Листинг программы
- static class LinqExtensions
- {
- public static IEnumerable<TResult> FullOuterJoin<TOuter, TInner, TKey, TResult>(
- this IEnumerable<TOuter> outer, // "Левая" коллекция
- IEnumerable<TInner> inner, // "Правая" коллекция
- Func<TOuter, TKey> outerKeySelector, // Делегат для выбора ключа "левых" элементов
- Func<TInner, TKey> innerKeySelector, // Делегат для выбора ключа "правых" элементов
- Func<TKey, TOuter, TInner, TResult> resultSelector, // Делегат для выбора результата
- IEqualityComparer<TKey> keyComparer = null, // Опциональный comparer для ключа (например, StringComparer.InvariantCultureIgnoreCase для сравнения строк без учета регистра)
- TOuter defaultOuter = default(TOuter), // Значение "левого" элемента, если таковой не найден
- TInner defaultInner = default(TInner)) // Значение "правого" элемента, если таковой не найден
- {
- keyComparer = keyComparer ?? EqualityComparer<TKey>.Default;
- var left = outer.ToLookup(outerKeySelector, keyComparer);
- var right = inner.ToLookup(innerKeySelector, keyComparer);
- var distinct = new HashSet<TKey>(from entry in left select entry.Key);
- distinct.UnionWith(from entry in right select entry.Key);
- return from key in distinct
- from a in left[key].DefaultIfEmpty(defaultOuter)
- from b in right[key].DefaultIfEmpty(defaultInner)
- select resultSelector(key, a, b);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д