💻 Exemplos: Capítulo 03: Estruturas Condicionais, Switch Expressions e Pattern Matching
💻 Exemplos: Capítulo 03: Estruturas Condicionais, Switch Expressions e Pattern Matching
Especialização em Sistemas com C# • Demonstrações Práticas Compiláveis
🎯 Objetivo dos Exemplos
Apresentar o poderoso sistema de Pattern Matching moderno do C# 12: substituição dos longos blocos switch imperativos por Switch Expressions concisas, padrões relacionais (<, >, <=), padrões lógicos (and, or, not) e desestruturação de tipos com Property Patterns.
1. Código Fonte Completo (Program.cs)
/**
* @file Program.cs
* @brief Pattern Matching avançado, Switch Expressions e desestruturação em C# 12.
*/
using System;
Console.WriteLine("=== CAPÍTULO 03: PATTERN MATCHING E SWITCH EXPRESSIONS ===");
// 1. Tipos de Domínio para Telemetria
public record AlertaHardware(string Dispositivo, double TemperaturaCelsius, int NivelBateriaPercentual);
// 2. Classificação de Temperatura via Relational & Logical Patterns
static string ClassificarTemperatura(double temp) => temp switch
{
< 0.0 => "CONGELAMENTO CRÍTICO",
>= 0.0 and < 45.0 => "NOMINAL / SEGURO",
>= 45.0 and < 75.0 => "ALERTA TÉRMICO ELEVADO",
>= 75.0 and < 100.0 => "CRÍTICO - THROTTLING DE CPU",
_ => "EMERGÊNCIA - DESLIGAMENTO IMEDIATO"
};
// 3. Avaliação de Risco com Property Pattern
static string AvaliarSaudeDispositivo(AlertaHardware alerta) => alerta switch
{
{ TemperaturaCelsius: >= 80.0, NivelBateriaPercentual: < 15 } =>
$"[PERIGO EXTREMO] {alerta.Dispositivo}: Superaquecimento com bateria fraca!",
{ TemperaturaCelsius: >= 80.0 } =>
$"[ALERTA TÉRMICO] {alerta.Dispositivo}: Temperatura perigosa ({alerta.TemperaturaCelsius}°C).",
{ NivelBateriaPercentual: <= 10 } =>
$"[BATERIA CRÍTICA] {alerta.Dispositivo}: Restam apenas {alerta.NivelBateriaPercentual}%.",
_ => $"[OPERACIONAL] {alerta.Dispositivo}: Todos os parâmetros dentro da normalidade."
};
// 4. Pattern Matching com Tipos Polimórficos (Type Pattern)
static string DespacharEvento(object evento) => evento switch
{
int codigo => $"Evento de Codigo Numerico: 0x{codigo:X4}",
string mensagem => $"Evento de Log: '{mensagem}'",
AlertaHardware a => $"Evento Estruturado: Dispositivo {a.Dispositivo}",
null => "Evento Nulo Descartado",
_ => $"Evento Desconhecido do Tipo {evento.GetType().Name}"
};
// Execução e Testes
var sensores = new[]
{
new AlertaHardware("Sensor_Nucleo_01", 38.5, 95),
new AlertaHardware("Sensor_GPU_Cluster", 82.0, 70),
new AlertaHardware("Sensor_Gateway_IoT", 92.4, 8)
};
Console.WriteLine("\n--- 1. Avaliação de Sensores via Property Pattern ---");
foreach (var s in sensores)
{
Console.WriteLine(AvaliarSaudeDispositivo(s));
Console.WriteLine($" -> Status Termico: {ClassificarTemperatura(s.TemperaturaCelsius)}");
}
Console.WriteLine("\n--- 2. Despacho Polimórfico de Eventos ---");
Console.WriteLine(DespacharEvento(0xA1B2));
Console.WriteLine(DespacharEvento("SUBSYSTEM_INITIALIZED"));
Console.WriteLine(DespacharEvento(sensores[0]));
2. Instruções de Compilação e Execução
dotnet new console -n AppPatternMatching -f net8.0
cd AppPatternMatching
dotnet run
3. Saída Esperada no Terminal
=== CAPÍTULO 03: PATTERN MATCHING E SWITCH EXPRESSIONS ===
--- 1. Avaliação de Sensores via Property Pattern ---
[OPERACIONAL] Sensor_Nucleo_01: Todos os parâmetros dentro da normalidade.
-> Status Termico: NOMINAL / SEGURO
[ALERTA TÉRMICO] Sensor_GPU_Cluster: Temperatura perigosa (82°C).
-> Status Termico: CRÍTICO - THROTTLING DE CPU
[PERIGO EXTREMO] Sensor_Gateway_IoT: Superaquecimento com bateria fraca!
-> Status Termico: CRÍTICO - THROTTLING DE CPU
--- 2. Despacho Polimórfico de Eventos ---
Evento de Codigo Numerico: 0xA1B2
Evento de Log: 'SUBSYSTEM_INITIALIZED'
Evento Estruturado: Dispositivo Sensor_Nucleo_01