Пример #1
0
        /// <summary>
        /// Updates the old collection with new items, while removing the inexistent.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="old"></param>
        /// <param name="fresh"></param>
        /// <returns></returns>
        public static void Update <T>(this IList <T> old, IEnumerable <T> fresh, Func <T, T, bool> isEqual)
        {
            if (old == null)
            {
                throw new ArgumentNullException("old");
            }
            if (fresh == null)
            {
                throw new ArgumentNullException("fresh");
            }
            var diff = fresh.Compare(old, isEqual);

            foreach (var item in diff.Removed)
            {
                var i = old.Where(d => isEqual(d, item)).Select((d, idx) => idx).First();
                old.RemoveAt(i);
            }
            foreach (var item in diff.Added)
            {
                old.Add(item);
            }
        }