Не знаю, почему вы выбрали такую логику c. Вы можете сделать это намного проще
double days = (DepartureDatePicker.Value - ArrivalDatePicker.Value).TotalDays;
int daysTotal = Convert.ToInt32(Math.Ceiling(days));
По сути, если оригинал days
имеет значение 0,2 или 1,3, вы просто округляете его до следующего целого числа. Это количество дней, за которые человек должен заплатить.
И теперь, имея количество дней, вы можете повторить свой dates
, добавить 1 день на каждую итерацию и проверить, какой это день недели, и взимать надлежащую плату - скидка или дополнительная плата
DateTeime startDate = ArrivalDatePicker.Value.Date;
decimal totalPrice = 0;
for (int dayNo = 0; dayNo < daysTotal; dayNo++)
{
DateTime currDate = startDate.AddDays(dayNo);
totalPrice += GetPriceForDate(currDate);
}
В GetPriceForDate
вы исследуете дату. Какой день недели, какой день месяца и т. Д. c, и оцените его в соответствии с бизнес-правилами.