Сопоставление шаблонов в C# для сложных сценариев: расширение шаблонов свойств
6 марта 2023 г.В этой статье основное внимание уделяется расширению шаблона свойств на следующий уровень. См. раздел «Предварительные условия» для предыдущего использованного примера платы за проезд, а следующая статья расширяет этот пример.
Предпосылки
Пожалуйста, ознакомьтесь с приведенным ниже примером статьи, в которой рассчитывается плата за проезд в зависимости от типа транспортного средства.
Усовершенствованный шаблон свойств C# 8.0
В статье описывается, как сопоставление с образцом обеспечивает эффективный способ использования и обработки этих данных в формах, которые…*medium.com
Обзор уже выполненных требований:
- Если транспортное средство Car => 100 рупий
- Если транспортное средство DeliveryTruck => 200 рупий
- Если это автобус => 150 рупий
- Если транспортным средством является такси => 120 рупий
- Автомобили и автомобили такси с «НЕТ» пассажирами доплачивают 10 рупий.
- Автомобили и автомобили такси с двумя пассажирами получают скидку 10 рупий.
- Автомобили и автомобили такси с тремя и более пассажирами получают скидку 20 рупий.
- За автобусы с менее чем 50 % пассажиров взимается дополнительная плата в размере 30 рупий.
- Автобусам с более чем 90% пассажиров предоставляется скидка 40 рупий.
- За грузовики весом более 5000 фунтов взимается дополнительная плата в размере 100 рупий.
- Легкие грузовики до 3000 фунтов со скидкой 20 рупий.
Расширим шаблон свойства.
Комитет по взиманию платы хочет добавить пиковую цену для последней функции с учетом времени.
Расширенные требования
- В часы пик удваивайте цену; это правило применяется в одном направлении, т. е. утренний входящий трафик в город и вечерний выездной трафик из города.
- Поздняя ночь & плата за проезд ранним утром снижена на 25%.
- В рабочее время плата за проезд увеличивается на 50%.
- В выходные дни плата за проезд не меняется во времени.
Справочная таблица
Давайте напишем код.
Давайте продолжим определение каждого столбца приведенной выше справочной таблицы.
Определить день
Во-первых, программа должна знать, является ли конкретный день рабочим или выходным. Ссылка на новый синтаксис переключателя.< /p>
В приведенном выше коде используется перечисление «System.DaysOfWeek».
public enum DayOfWeek
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6
}
Определить время
Во-первых, доступные временные интервалы.
private enum TimeSlots
{
MorningPeak,
Daytime,
EveningPeak,
Overnight
}
Теперь давайте определим временные интервалы, используя синтаксис переключателя со временем в часах.
Определить направление
Поскольку существует два возможных значения направления, его можно напрямую использовать в качестве логического флага, т. е. если «истина» означает входящий поток, а если «ложь» — исходящий.
True => inbound => Into the city
False => outbound => Out of the city
Альтернативой является создание перечисления и добавление синтаксиса переключателя, аналогично тому, что мы сделали выше.
Определить Премиум
После того, как все столбцы таблицы идентифицированы, приведенное ниже выражение переключения с шаблоном кортежа вычисляет надбавку за проезд.
Обратитесь к синтаксису сопоставления с образцом с помощью single & несколько классов недвижимости. Ссылка
Выражение переключения.
Вызов премиум-метода
var costInbound = PeakPremium.CalculatePeakTimePremium(DateTime.Now, true);
var costOutbound = PeakPremium.CalculatePeakTimePremium(DateTime.Now, false);
Console.WriteLine("Charges {0} for {1}",costInbound,DateTime.Now);
Console.WriteLine("Charges {0} for {1}", costOutbound, DateTime.Now);
Вывод
Charges 1.50 for 9/8/2020 12:05:29 PM
Charges 1.50 for 9/8/2020 12:05:29 PM
Пример GitHub
ssukhpinder/PropertyPatternExample
<цитата>
Спасибо, что прочитали. Надеюсь, вам понравилась статья..!!
Также опубликовано здесь
Оригинал