Сопоставление шаблонов в C# для сложных сценариев: расширение шаблонов свойств

Сопоставление шаблонов в 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


<цитата>

Спасибо, что прочитали. Надеюсь, вам понравилась статья..!!

Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE