示例#1
0
        private void TestMove(OrderMovement orderMovement)
        {
            //Setup
            var isContiguous = new List <IIsOrdered>();

            for (int i = 0; i < 5; i++)
            {
                isContiguous.Add(new TestSubject {
                    Id = i, Order = i
                });
            }

            var subject = isContiguous[2];

            //Exercise
            IsOrderedHelper.MoveWithinList(isContiguous, subject, orderMovement);

            //Test and assert
            Assert.IsTrue(IsOrderedHelper.IsContiguous(isContiguous));

            if (orderMovement == OrderMovement.Up)
            {
                Assert.IsTrue(subject.Order == 1);
            }
            else
            {
                Assert.IsTrue(subject.Order == 3);
            }
        }
示例#2
0
        public static void MoveWithinList <T>(IEnumerable <T> list, T mover, OrderMovement orderMovement) where T : class, IIsOrdered
        {
            //Firm up enumeration problems
            list = list.ToList();

            //Ensure contiguousnes
            MakeContiguous(list);

            if (mover.Order == 0 && orderMovement == OrderMovement.Down)
            {
                return;//Nothing to do because this is already the first in the list
            }
            if (mover.Order == list.Count() && orderMovement == OrderMovement.Up)
            {
                return;//Nothing to do because this is already the last in the list
            }
            int delta;

            switch (orderMovement)
            {
            case OrderMovement.Up:
                delta = -1;
                break;

            case OrderMovement.Down:
                delta = 1;
                break;

            default:
                throw new System.NotImplementedException();
            }


            foreach (var iIsOrdered in list.OrderBy(i => i.Order))
            {
                if (iIsOrdered.Order == mover.Order + delta)
                {
                    iIsOrdered.Order += -1 * delta;
                    mover.Order      += delta;

                    break; //There is no need to continue
                }
            }
        }