Расширенные методы шаблонов свойств в C# 8.0

Расширенные методы шаблонов свойств в C# 8.0

6 марта 2023 г.

В статье описывается, как сопоставление с образцом эффективно использует и обрабатывает данные в формах, которые не были частью основной системы.

Предпосылки:

Пожалуйста, просмотрите приведенные ниже статьи, чтобы получить общее представление о концепциях C# 8.0, необходимых для этой статьи.

Новый синтаксис Switch с C# 8.0< /сильный>

Введение в шаблон свойств  —  C# 8.0

Начнем

Давайте возьмем пример Калькулятора платы за проезд и посмотрим, как сопоставление с образцом помогает написать для него алгоритм.

:::подсказка Класс сущности, используемый на протяжении всей статьи

:::

Пример 1. Расчет платы за проезд в соответствии со следующими условиями

  • Если транспортное средство Car => 100 рупий
  • Если транспортное средство DeliveryTruck => 200 рупий
  • Если это автобус => 150 рупий
  • Если транспортным средством является такси => 120 рупий

Программа сопоставления шаблонов с новым синтаксисом переключения

Если тип транспортного средства совпадает с Car 100, возвращается & скоро. Обратите внимание, что значение null & {} — это варианты по умолчанию для типа объекта.

Кроме того, «_» можно использовать для программирования сценария по умолчанию. Это гораздо более чистый & эффективный способ кодирования & также рекомендуется использовать однобуквенные имена переменных внутри синтаксиса переключателя.

public static int TollFare(Object vehicleType) => vehicleType switch
{
 Car c => 100,
 DeliveryTruck d => 200,
 Bus b => 150,
 Taxi t => 120,
 null => 0,
 { } => 0
};

Проверить вышеуказанную программу

Тестовые примеры с точки зрения консольного приложения. В приведенном ниже коде показано, как вызвать указанную выше функцию сопоставления с образцом из основного метода.

var car = new Car();
var taxi = new Taxi();
var bus = new Bus();
var truck = new DeliveryTruck();
Console.WriteLine($"The toll for a car is {TollFare(car)}");
Console.WriteLine($"The toll for a taxi is {TollFare(taxi)}");
Console.WriteLine($"The toll for a bus is {TollFare(bus)}");
Console.WriteLine($"The toll for a truck is {TollFare(truck)}");

Консольный вывод

The toll for a car is 100
The toll for a taxi is 120
The toll for a bus is 150
The toll for a truck is 200

Пример 2. Добавление цен на размещение в зависимости от типа транспортного средства

  • Автомобили и автомобили такси с «НЕТ» пассажирами доплачивают 10 рупий.
  • Автомобили и автомобили такси с двумя пассажирами получают скидку 10 рупий.
  • Автомобили и автомобили такси с тремя и более пассажирами получают скидку 20 рупий.
  • За автобусы с менее чем 50 % пассажиров взимается дополнительная плата в размере 30 рупий.
  • Автобусам с более чем 90% пассажиров предоставляется скидка 40 рупий.
  • За грузовики весом более 5000 фунтов взимается дополнительная плата в размере 100 рупий.
  • Легкие грузовики до 3000 фунтов со скидкой 20 рупий.

Переключатель соответствия шаблону

См. синтаксис сопоставления шаблонов с одинарным & несколько классов недвижимости. Ссылка

Сопоставление с образцом — Сущность автомобиля

Car { PassengerCount: 0 } => 100 + 10,
Car { PassengerCount: 1 } => 100,
Car { PassengerCount: 2 } => 100 - 10,
Car c => 100 - 20,

Сопоставление с образцом  –  Такси

Taxi {Fare:0 }=>100+10,
Taxi { Fare: 1 } => 100,
Taxi { Fare: 2 } => 100 - 10,
Taxi t => 100 - 20,

Сопоставление с образцом — Объект автобуса

Bus b when ((double)b.RidersCount / (double)b.Capacity) < 0.50 => 150 + 30,
Bus b when ((double)b.RidersCount / (double)b.Capacity) > 0.90 => 150 - 40,
Bus b => 150,

Сопоставление с образцом — Сущность грузовика доставки

DeliveryTruck t when (t.Weight > 5000) => 200 + 100,
DeliveryTruck t when (t.Weight < 3000) => 200 - 20,
DeliveryTruck t => 200,

Объединение всех объектов

Пример ниже демонстрирует преимущества сопоставления с образцом: ветки шаблона компилируются по порядку. Компилятор также предупреждает о недостижимом коде.

Проверить вышеуказанную программу

Тестовые примеры с точки зрения консольного приложения. В приведенном ниже коде показано, как вызвать указанную выше функцию сопоставления с образцом из основного метода.

var car1 = new Car{ PassengerCount=2};
var taxi1 = new Taxi { Fare = 0 };
var bus1 = new Bus { Capacity = 100, RidersCount = 30 };
var truck1 = new DeliveryTruck { Weight = 30000 };
Console.WriteLine($"The toll for a car is {OccupancyTypeTollFare(car1)}");
Console.WriteLine($"The toll for a taxi is {OccupancyTypeTollFare(taxi1)}");
Console.WriteLine($"The toll for a bus is {OccupancyTypeTollFare(bus1)}");
Console.WriteLine($"The toll for a truck is {OccupancyTypeTollFare(truck1)}");

Консольный вывод

The toll for a car is 90
The toll for a taxi is 110
The toll for a bus is 180
The toll for a truck is 300

<цитата>

"Сопоставление с образцом делает код более читабельным и предлагает альтернативу объектно-ориентированным методам, когда вы не можете добавить код в свои классы".

Шаблон расширенного свойства

Расширенный шаблон свойств C#

Репозиторий GitHub

ssukhpinder/PropertyPatternExample n Сопоставление с образцом в C# 8.0. Внесите свой вклад в разработку ssukhpinder/PropertyPatternExample, создав учетную запись на…github.com< /p>


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

Если вам понравилась эта статья, подпишитесь на меня в LinkedIn Instagram Facebook Твиттер


Оригинал