IRONSOFTWAREHOME
ATUALIZAÇÕES DO DESENVOLVEDOR

Uniões discriminadas em C# (como funciona para desenvolvedores)

Curtis Chau
Curtis Chau
Updated: 23 de abril de 2026

Como desenvolvedor .NET que trabalha com geração dinâmica de PDFs usando o IronPDF , você frequentemente precisa representar e gerenciar uma variedade de tipos específicos — pense em diferentes tipos de dados de documentos, mensagens de registro, funções de usuário ou opções de exportação. É aqui que entra em jogo o conceito de união discriminada em C#.

Embora o C# não tenha suporte nativo para uniões discriminadas da mesma forma que o F# ou o Rust, ainda é possível simular uniões discriminadas de forma eficaz. Neste artigo, vamos explorar como definir e usar um tipo de união discriminada em C#, demonstrar como aplicá-lo com o IronPDF para processamento de PDFs em situações reais e analisar os benefícios que esse padrão oferece, especialmente quando combinado com o casamento de padrões.

What Are Discriminated Unions in C#?

As uniões discriminadas, também conhecidas como uniões etiquetadas ou tipos de união, permitem que uma variável armazene um valor de um conjunto limitado de opções possíveis, onde cada opção está associada a um identificador de caso exclusivo.

Em outras linguagens, como F#, você pode defini-las usando a palavra-chave union. O C# não oferece esse recurso nativamente, mas os desenvolvedores podem usar combinações inteligentes de registros, classes e expressões switch para simulá-los.

Por exemplo:

public abstract record PdfAction;
public record GenerateReport(string ReportName) : PdfAction;
public record LogError(string Message) : PdfAction;
public record ExportToExcel(string FilePath) : PdfAction;

Cada registro acima representa um caso individual da união. O tipo base PdfAction é o discriminante.

Por que os sindicatos discriminatórios são importantes nos fluxos de trabalho do IronPDF

Imagine que você está criando um gerador de relatórios em PDF usando o IronPDF e precisa executar diferentes ações com base na entrada do usuário — talvez gerar um PDF, registrar um erro ou exportar dados.

Usar uniões discriminadas em C# permite representar esses tipos de opção de forma clara, levando a segurança em tempo de compilação, menos bugs e lógica mais clara.

Eis como você pode usá-lo com o IronPDF:

void HandlePdfAction(PdfAction action)
{
    switch (action)
    {
        case GenerateReport r:
            var pdf = new IronPdf.HtmlToPdf().RenderHtmlAsPdf("<h1>" + r.ReportName + "</h1>");
            pdf.SaveAs(r.ReportName + ".pdf");
            break;
        case LogError e:
            Console.WriteLine("Logging Error: " + e.Message);
            break;
        case ExportToExcel x:
            Console.WriteLine("Exporting to Excel at " + x.FilePath);
            break;
        default:
            throw new NotSupportedException("Unknown action");
    }
}

Essa abordagem mantém seu código organizado e robusto, além de facilitar a compreensão de todas as opções possíveis em um único local por parte dos desenvolvedores.

Simulating Discriminated Unions in C# – Struct vs. Record vs. Class

Embora o C# não possua a palavra-chave union, você pode simular uniões discriminadas usando:

  • Registros: Ideal para dados imutáveis ​​e oferece suporte à correspondência de padrões de forma clara.
  • Classes: Mais flexíveis com herança e semântica de referência.
  • Structs: Úteis para tipos de valor, mas menos flexíveis ao lidar com tipos de referência ou herança.

Uniões Discriminadas em C# (Como Funciona para Desenvolvedores): Figura 1 - Struct vs. Record vs. Class

Se o desempenho e o layout da memória forem importantes — por exemplo, em registro de PDFs de alto rendimento — você pode considerar usar uniões discriminadas de structs com cautela:

public interface IAction { }
public readonly struct SaveAction : IAction
{
    public string FileName { get; }
    public SaveAction(string fileName) => FileName = fileName;
}

Observação: você perderá algumas vantagens de correspondência de padrões com structs, especialmente ao depender de expressões switch.

Benefits of Using Discriminated Unions in C#

Existem diversas vantagens importantes na adoção desse padrão de engenharia de software:

  • Segurança em tempo de compilação: Você detectará casos ausentes em uma expressão switch antes da execução do programa.
  • Lógica mais clara: É mais fácil escrever, comentar e raciocinar sobre ações com casos nomeados.
  • Separação de responsabilidades: Você desvincula comportamentos com base em dados , em vez de hierarquias de tipos.
  • Facilidade de refatoração: Adicionar ou remover casos torna-se mais simples.

Quando usado em conjunto com o IronPDF, isso facilita o gerenciamento da entrada do usuário, da lógica de renderização ou a criação de modelos dinâmicos com diferentes fluxos de valores.

Quando usar sindicatos discriminados com o IronPDF

Aqui estão alguns cenários práticos onde esse padrão se destaca:

  • Fluxos de trabalho de geração de PDF: diferentes etapas no ciclo de vida de um documento (gerar, salvar, enviar por e-mail).
  • Modelos de permissão: Representam diferentes níveis de acesso do usuário.
  • Sistemas de registro: Utilize tipos de união discriminados para os níveis de registro (info, error, debug).
  • Testes unitários: Defina as ações de teste como tipos de união para árvores lógicas de fácil manutenção.
  • Opções de exportação: Representa destinos de saída como PDF, Excel e Word como instâncias de união.

Uniões Discriminadas em C# (Como Funciona para Desenvolvedores): Figura 2 - Cenários comuns para uniões discriminadas em aplicativos .NET

Exemplo – Manipulando ações de PDF a partir de eventos da interface do usuário

Suponhamos que você esteja capturando eventos da interface do usuário e queira encaminhá-los para tarefas do IronPDF usando uniões discriminadas:

public abstract record UserAction;
public record GeneratePdf(string HtmlContent, string FileName) : UserAction;
public record ShowMessage(string Text) : UserAction;
public record ExitApplication() : UserAction;
void OnUserEvent(UserAction action)
{
    switch (action)
    {
        case GeneratePdf pdf:
            var renderer = new IronPdf.HtmlToPdf();
            var document = renderer.RenderHtmlAsPdf(pdf.HtmlContent);
            document.SaveAs(pdf.FileName);
            break;
        case ShowMessage msg:
            MessageBox.Show(msg.Text);
            break;
        case ExitApplication:
            Application.Exit();
            break;
    }
}

Isso permite representar eventos com lógica clara e reduz a dependência de tipos de objetos públicos ou manipulação excessivamente dinâmica.

Future Outlook – Will C# Ever Support Native Discriminated Unions?

Já existe uma proposta para adicionar suporte nativo a uniões discriminadas em C#, especialmente devido à crescente demanda por sistemas de tipos mais expressivos. Embora a linguagem ainda não tenha introduzido uma palavra-chave union propriamente dita, o C# continua a evoluir, aproximando recursos como registros, correspondência de padrões e expressões switch da funcionalidade completa de união discriminada.

Os desenvolvedores .NET interessados ​​em construções de linguagem modernas e amigáveis ​​à programação funcional devem acompanhar de perto este espaço.

Considerações finais

O uso de uniões discriminadas em C#, mesmo sem suporte nativo, pode melhorar significativamente a forma como você estrutura e representa a lógica em aplicações IronPDF . Ao aproveitar registros, expressões switch e classes base, você tornará seu código mais legível, fácil de manter e resistente a erros, além de desbloquear uma maneira mais declarativa e expressiva de lidar com tarefas relacionadas a PDFs.

Se você é um engenheiro de software que desenvolve aplicações .NET modernas e flexíveis, esse padrão é indispensável em seu conjunto de ferramentas.

Experimente o IronPDF gratuitamente hoje mesmo!

Pronto para levar a geração de PDFs em C# para o próximo nível? Baixe o IronPDF e comece com um teste gratuito . Seja para gerar documentos a partir de HTML, registrar exportações ou automatizar relatórios usando sindicatos discriminados, o IronPDF oferece o poder e o desempenho que seu aplicativo merece.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.