Novidades do C# 12: Experimental attribute

Renato Groffe
3 min readNov 27, 2023

--

Outra novidade trazida pelo C# 12 é o tipo ExperimentalAttribute, um atributo que integra o namespace System.Diagnostics.CodeAnalysis. Este novo elemento permite que marquemos classes ou métodos como recursos que ainda se encontram em modo experimental, a fim de que estruturas que consumam tais funcionalidades assumam eventuais riscos no uso de capacidades que estão possivelmente em Preview.

Essa novidade foi inclusive abordada em uma live recente no Canal .NET (clique aqui para assistir ao conteúdo no YouTube):

Na listagem seguinte podemos observar que o método ShowCurrentDateTime na classe MessageHelper foi marcado com o atributo Experimental. É necessário que se informe um valor para o parâmetro diagnosticId (MessageHelper01 neste exemplo), um pré-requisito para que o compilador aceite ou não o uso do recurso experimental:

Podemos ainda utilizar o parâmetro UrlFormat com um link para uma eventual documentação do recurso experimental, como indicado na imagem a seguir:

Clique nesta imagem para visualizar com uma melhor resolução

Uma tentativa de utilizar o método ShowCurrentDateTime de MessageHelper como especificado na listagem seguinte:

Resultará em um erro, que foi destacado nas próximas imagens:

Clique nesta imagem para visualizar com uma melhor resolução
Clique nesta imagem para visualizar com uma melhor resolução

Com a seguinte mensagem:

‘ConsoleAppExperimentalAttribute.Helpers.MessageHelper.ShowCurrentDateTime()’ is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.

Os dizeres desta mensagem são bem claros: precisamos desativar este alerta, para conseguir utilizar o recurso experimental sem erros de compilação. O aviso ainda destaca a possibilidade de mudanças envolvendo tal recurso ou até uma provável remoção.

Dentro do próprio Visual Studio 2022 podemos suprimir este alerta, clicando sobre o ícone Quick Actions e selecionando Suppress or configure issues > Suppress MessageHelper01 > in Source (nota-se aqui o uso do valor MessageHelper01, que foi informado através do parâmetro diagnosticId de ExperimentalAttribute):

Clique nesta imagem para visualizar com uma melhor resolução

As mudanças propostas serão exibidas para que o usuário/Desenvolvedor confirme isto:

Clique nesta imagem para visualizar com uma melhor resolução
Clique nesta imagem para visualizar com uma melhor resolução

O trecho de código com a chamada ao método ShowCurrentDateTime de MessageHelper ficará envolto pela diretiva #pragma, que desativará o alerta que gera um erro de compilação ao se utilizar esse recurso experimental:

Podemos observar isto na próxima listagem:

Ao executar esta Console Application teremos como resultado:

Esse exemplo foi disponibilizado como um repositório do GitHub:

https://github.com/renatogroffe/CSharp12-ExperimentalAttribute

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker