Exemple #1
0
            public static IEnumerable<TItem> Replace<TSlot, TItem>(
                this ISlotContainer<TSlot, TItem> container,
                TItem item)
                where TSlot : ISlot
                where TItem : class, ISlotItem
            {
                Ensure.Any.IsNotNull(item, nameof(item));

                var allSlots = item.GetAllSlots();
                var occupiedSlots = OccupiedSlots(container);
                var slotsToFree = allSlots.Intersect(occupiedSlots);

                var itemsToFree = toSet(
                    slotsToFree.Bind(s => FindItemInSlot(container, s)).Distinct());

                itemsToFree.Iter(container.Remove);

                container.Add(item);

                return itemsToFree;
            }
Exemple #2
0
            public static IEnumerable <TItem> Replace <TSlot, TItem>(
                [NotNull] this ISlotContainer <TSlot, TItem> container,
                [NotNull] TItem item)
                where TSlot : ISlot
                where TItem : Node, ISlotItem
            {
                Ensure.Any.IsNotNull(item, nameof(item));

                var allSlots      = new HashSet <string>(item.GetAllSlots());
                var occupiedSlots = new HashSet <string>(OccupiedSlots(container));
                var slotsToFree   = allSlots.Intersect(occupiedSlots);

                var itemsToFree = slotsToFree
                                  .Select(s => FindItem(container, s))
                                  .Where(i => i != null)
                                  .Distinct()
                                  .ToList();

                itemsToFree.ForEach(container.Remove);

                container.Add(item);

                return(itemsToFree);
            }