예제 #1
0
        public IItinerary ReplaceSegment(IItinerary legs)
        {
            if (null == legs)
            {
                throw new ArgumentNullException("legs");
            }

            IItinerary newItinerary = null;
            int        i            = 0;

            while (i < _legs.Length)
            {
                if (null != newItinerary && newItinerary.FinalArrivalLocation.Equals(_legs[i].LoadLocation))
                {
                    newItinerary = newItinerary.Append(_legs[i]);
                }
                else if (_legs[i].UnloadLocation.Equals(legs.InitialDepartureLocation))
                {
                    ILeg[] newLegs = new ILeg[i + 1];
                    Array.Copy(_legs, newLegs, i + 1);
                    newItinerary = new Itinerary(newLegs);
                    foreach (ILeg l in legs)
                    {
                        newItinerary = newItinerary.Append(l);
                    }
                }

                ++i;
            }
            if (null == newItinerary)
            {
                string message = string.Format("The legs departure location ({0}) is not in the itinerary.", legs.InitialDepartureLocation);
                throw new ArgumentOutOfRangeException("legs", message);
            }

            return(newItinerary);
        }