Start Debugging

Recursos do C# 14

O que de fato chegou no C# 14, com código.

Este pilar indexa tudo o que escrevi sobre os recursos da linguagem C# 14: tipos união, construtores e eventos partial, tipos de extensão, e os pequenos ganhos ergonômicos que passam despercebidos nas notas oficiais da versão.

Por onde começar

Comece pelos posts sobre tipos união e membros partial se você está vindo do C# 12 - são as mudanças de comportamento mais significativas. O resto é qualidade de vida.

O que tem nesta página

A lista abaixo coleta automaticamente os posts com qualquer uma das tags: c# 14, csharp 14, c#, csharp, c# language. Mais recentes primeiro.

Índice (217 posts)

2026 / 07

  • Como adicionar compressão de respostas a uma API do ASP.NET Core 11

    Um guia completo da compressão de respostas no ASP.NET Core 11: AddResponseCompression e UseResponseCompression, o novo provedor Zstandard integrado ao lado de Brotli e Gzip, níveis de compressão, EnableForHttps e o risco de CRIME/BREACH, tipos MIME personalizados, a ordem do middleware e quando deixar o proxy reverso fazer isso.

  • Como retornar uma união tipada Results<T1, T2> de um endpoint de minimal API no ASP.NET Core 11

    Declare o tipo de retorno do handler como Results<Ok<T>, NotFound> e retorne TypedResults.Ok / TypedResults.NotFound: a união oferece verificação em tempo de compilação de que o handler só retorna o que declara, e ela se autodescreve ao OpenAPI para que você nunca escreva .Produces na mão. Cobre handlers assíncronos, o limite de seis tipos e testes no ASP.NET Core 11.

  • Como adicionar output caching a uma Minimal API no ASP.NET Core 11

    Um guia completo e funcional de output caching em uma Minimal API do ASP.NET Core 11: AddOutputCache e UseOutputCache, CacheOutput em endpoints e MapGroup, políticas nomeadas e de base, Expire, VaryByQuery e VaryByHeader, remoção por tag com EvictByTagAsync, proteção contra cache stampede, revalidação com ETag e um armazenamento de apoio no Redis.

  • Como personalizar o documento OpenAPI com AddOperationTransformer e AddSchemaTransformer no ASP.NET Core 11

    Um mergulho profundo no pipeline de transformadores OpenAPI embutido no .NET 11: transformadores de operação versus de esquema, os objetos de contexto, a ordem de execução, transformadores ativados por DI e receitas para cabeçalhos, respostas, exemplos e ajustes por propriedade.

  • .NET 11 Runtime Async abandona a flag EnablePreviewFeatures

    Conforme as versoes preliminares do .NET 11 avancam para o lancamento de novembro, o Runtime Async se formou: projetos net11.0 sao ativados com uma unica propriedade do MSBuild, e as proprias bibliotecas do runtime agora sao compiladas com ele.

  • O que é PGO no .NET e preciso ativar?

    PGO (otimização guiada por perfil) permite que o JIT do .NET especialize o código quente para os tipos e ramos que sua carga de trabalho realmente executa. O Dynamic PGO está ligado por padrão desde o .NET 8, então no .NET 8 e versões posteriores você não precisa ativar. Aqui está o que ele faz, como ver o efeito e os casos raros em que você mexe no ajuste.

  • O que é compilação em camadas e como raciocinar sobre ela?

    A compilação em camadas permite que o JIT do .NET compile cada método duas vezes: primeiro rápido e sem otimização para colocar sua aplicação em execução, e depois de novo com otimizações completas quando o runtime sabe que um método é quente. Aqui você verá como o tier 0, o tier 1, a substituição na pilha e o Dynamic PGO se encaixam, e como observá-los e ajustá-los.

  • O que e o contrato IHostedService e quando devo usa-lo?

    IHostedService e a interface de dois metodos (StartAsync/StopAsync) que o host generico do .NET chama na inicializacao e no encerramento gracioso. Aqui esta o que o contrato promete, quando implementa-lo diretamente e as mudancas de comportamento do .NET 10 e 11 que pegam as pessoas de surpresa.

  • O que é código trim-safe e como eu escrevo isso?

    Código trim-safe é código que o trimmer do .NET consegue provar estaticamente que é alcançável, então ele sobrevive quando o código não usado é removido de um app self-contained. Este é o guia prático: ligue o analisador, leve cada aviso IL2xxx a zero, anote a reflexão com DynamicallyAccessedMembers, propague RequiresUnreferencedCode para APIs públicas e substitua padrões não analisáveis por geradores de código-fonte.

  • Correção: CS9035 "Required member 'X' must be set in the object initializer" em C#

    CS9035 significa que um membro marcado como required não foi atribuído. Atribua-o no inicializador de objeto, ou adicione um construtor com [SetsRequiredMembers] que atribua cada membro required.

  • Como personalizar respostas de erro de validação de minimal APIs com IProblemDetailsService no ASP.NET Core 11

    Chame AddProblemDetails com um callback CustomizeProblemDetails para remodelar o 400 que a validação embutida de minimal APIs retorna no ASP.NET Core 11: adicione um traceId, reescreva o title, troque 400 por 422, ou assuma o controle total com um IProblemDetailsWriter personalizado.

  • Como configurar autenticação JWT bearer em uma minimal API no ASP.NET Core 11

    Uma configuração completa e funcional de autenticação JWT bearer em uma minimal API do ASP.NET Core 11: instalar o pacote, conectar AddAuthentication().AddJwtBearer(), emitir um token, proteger endpoints com RequireAuthorization, adicionar políticas de role e de claim, e testar tudo com dotnet user-jwts.

  • Como usar filtros de consulta nomeados para soft delete e multi-tenancy no EF Core 11

    Aplique dois filtros de consulta globais independentes à mesma entidade no EF Core 11: um filtro de soft delete e um filtro de tenant, cada um nomeado para que você possa desativar um sem o outro com IgnoreQueryFilters.

  • Como implementar e consumir IAsyncDisposable com await using em C#

    Um guia completo de IAsyncDisposable em C#: quando usar await using, como escrever DisposeAsync e DisposeAsyncCore corretamente, e os detalhes de empilhamento e ConfigureAwait que causam vazamento de recursos.

  • Como propagar um CancellationToken por métodos async no .NET 11

    Passe um CancellationToken de forma limpa por cada camada de uma cadeia de chamadas async no .NET 11: convenção do último parâmetro, valores padrão, tokens vinculados, RequestAborted do ASP.NET Core e o analisador CA2016 que detecta os que você esquece.

  • Como definir um tempo limite em uma operação assíncrona com CancellationTokenSource.CancelAfter em C#

    Use CancellationTokenSource.CancelAfter para aplicar um prazo em operações assíncronas no .NET 11: construtor vs CancelAfter, tokens vinculados, tratamento de exceções, Task.WaitAsync, TryReset para pooling e timeouts testáveis com TimeProvider.

2026 / 06

2026 / 05

2026 / 04

2026 / 02

2026 / 01

2025 / 04

2025 / 01

  • Desempenho no .NET: ToList vs ToArray

    O .NET 9 melhora significativamente o desempenho de ToArray usando InlineArray, tornando-o mais rápido e eficiente em memória do que ToList. Veja benchmarks comparando .NET 8 vs .NET 9.

  • C# 13: Use coleções params com qualquer tipo de coleção reconhecido

    C# 13 estende o modificador params para além de arrays e suporta Span, ReadOnlySpan, IEnumerable e outros tipos de coleção, reduzindo boilerplate e melhorando a flexibilidade.

  • Como mudar para C# 13

    Como corrigir 'Feature is not available in C# 12.0' e mudar seu projeto para C# 13 alterando o target framework ou definindo LangVersion no seu arquivo .csproj.

2024 / 12

  • O que há de novo no C# 14.0

    Um resumo de todos os novos recursos do C# 14.0, incluindo a palavra-chave field, membros de extensão, atribuição condicional a null, conversões implícitas de span e muito mais.

  • Histórico de versões da linguagem C#

    A evolução do C# o transformou em uma linguagem moderna e de alto desempenho. Este guia acompanha cada marco importante. Os primeiros anos (C# 1.0 - 1.2). O C# foi lançado em 2002 como linguagem primária para o .NET Framework. Parecia com Java, mas com foco no desenvolvimento Windows. A versão 1.2 chegou logo depois com pequenas...

2023 / 11

2023 / 10

  • C# como marcar recursos como experimentais

    A partir do C# 12, um novo ExperimentalAttribute permite marcar tipos, métodos, propriedades ou assemblies como experimentais. Aprenda a usá-lo com diagnosticId, tags pragma e UrlFormat.

  • C# parâmetros ref readonly

    O modificador ref readonly no C# oferece uma forma mais transparente de passar referências somente leitura. Veja como ele melhora o modificador in, com restrições mais claras e visibilidade para quem chama.

  • C# como embaralhar um array?

    A forma mais fácil de embaralhar um array em C# é usar Random.Shuffle, introduzido no .NET 8. Funciona in-place tanto em arrays quanto em spans.

  • C# o que é uma NullReferenceException e como corrigir?

    Entenda o que causa uma NullReferenceException em C#, como debugar e como prevenir usando checagens de null, o operador null-conditional e tipos de referência anuláveis.

  • Adicionar/remover TypeInfoResolver em um JsonSerializerOptions existente

    Aprenda a adicionar ou remover instâncias de TypeInfoResolver em um JsonSerializerOptions existente usando a nova propriedade TypeInfoResolverChain do .NET 8.

  • C# 12 Interceptors

    Conheça os interceptors do C# 12, um recurso experimental do compilador no .NET 8 que permite substituir chamadas de método em tempo de compilação usando o atributo InterceptsLocation.

2023 / 09

2023 / 08

  • C# 12 Inline arrays

    Inline arrays permitem criar um array de tamanho fixo dentro de uma struct. Uma struct desse tipo, com um buffer inline, deve entregar desempenho comparável a um buffer unsafe de tamanho fixo. Inline arrays são pensados principalmente para o time do runtime e alguns autores de bibliotecas, para melhorar o desempenho em certos cenários. Provavelmente...

  • C# 12 expressões de coleção

    O C# 12 traz uma nova sintaxe simplificada para criar arrays. Fica assim: É importante notar que o tipo do array precisa ser especificado explicitamente, então você não pode usar var para declarar a variável. De forma parecida, se você quiser criar um Span<int>: Arrays multidimensionais As vantagens dessa sintaxe enxuta...

  • C# como esperar um processo terminar?

    Você pode usar o método WaitForExit para esperar o processo finalizar. Seu código espera de forma síncrona até o processo terminar e então retoma a execução. Veja um exemplo: O código acima inicia um novo processo cmd.exe e executa o comando timeout 5. A chamada process.WaitForExit() força o programa...

  • C# 12 alias para qualquer tipo

    A diretiva using alias foi relaxada no C# 12 para permitir criar alias para qualquer tipo, não apenas tipos nomeados. Isso significa que agora você pode criar alias para tuples, pointers, tipos de array, tipos genéricos, etc. Assim, em vez de usar a forma estrutural completa de um tuple, dá para criar um alias curto e descritivo...

  • Existe em C# um equivalente à instrução With...End With?

    A instrução With...End With do VB permite executar uma série de comandos que se referem repetidamente a um único objeto, usando uma sintaxe simplificada para acessar seus membros. Existe um equivalente em C#? Não. O mais próximo seriam os inicializadores de objeto, mas eles só servem para instanciar objetos novos.

2023 / 07

  • C# 12 - Construtores primários

    A partir do C# 12, é possível definir um construtor primário em classes e structs. Os parâmetros ficam entre parênteses logo após o nome do tipo. Eles têm um escopo amplo: podem inicializar propriedades ou campos, servir como variáveis em métodos ou funções locais e ser passados para um construtor base.

2023 / 06

  • Como começar a programar com C#

    Um guia para iniciantes sobre como começar a programar em C#, desde a configuração do Visual Studio até escrever seu primeiro programa e encontrar recursos de aprendizado.

  • Como mudar para o C# 12

    Resolva os erros de versão da linguagem C# 12 atualizando seu target framework para o .NET 8 ou definindo LangVersion no seu arquivo .csproj.

  • O que há de novo no C# 12

    Uma visão geral dos novos recursos do C# 12, incluindo construtores primários, parâmetros lambda padrão, expressões de coleção, inline arrays e mais.

2023 / 05

2023 / 03

2020 / 11

2020 / 05

  • C# using var (using declaration)

    Use as using declarations do C# 8 (`using var`) para descartar objetos IDisposable sem chaves aninhadas. Sintaxe, regras de escopo e quando preferir blocos `using`.

2020 / 04

2019 / 01

2013 / 10

2013 / 06

2013 / 05

2012 / 01

Todos os pilares Início