Novidades do .NET 8: definindo valores não permitidos com DeniedValuesAttribute

Renato Groffe
2 min readApr 22, 2023

--

Em um artigo anterior sobre novidades do .NET 8 abordei a utilização do tipo AllowedValuesAttribute, uma Data Annotation que integra o namespace System.ComponentModel.DataAnnotations e que permite definir os valores permitidos para uma propriedade:

Novidades do .NET 8: definindo valores possíveis com AllowedValuesAttribute

Neste novo post dou continuidade à série que cobre novos recursos recursos do .NET 8, descrevendo desta vez o uso do tipo DeniedValuesAttribute (também pertencente ao namespace System.ComponentModel.DataAnnotations). Como o próprio nome sugere, com este atributo serão indicados valores não permitidos para uma propriedade em uma classe.

Outras novidades do .NET 8 foram detalhadas nos seguintes artigos:

.NET 8: primeiros testes com o Preview 1 + melhorias na desserialização JSON

Novidades do C# 12: utilizando um alias para referenciar um tipo

Na listagem a seguir observamos um exemplo de utilização de DeniedValuesAttribute com a classe Projeto:

  • Este atributo foi associado à propriedade TargetFramework (que corresponde a uma versão do .NET), recebendo um array como parâmetro e no qual constará uma sequência de valores não permitidos. Além disso, é possível ainda definir um descritivo para uma eventual inconsistência na propriedade ErrorMessage;
  • As propriedades TargetFramework e Descricao estão marcadas com RequiredAttribute, o que implicará na obrigatoriedade de preenchimento das mesmas.

Já na próxima listagem está o conteúdo do arquivo Program.cs:

  • Um array da classe Projeto foi inicializado com 5 instâncias, a fim de testar o uso de DeniedValuesAttribute;
  • O método TryValidateObject da classe Validator (namespace System.ComponentModel.DataAnnotations) foi invocado, retornando informações sobre inconsistências de acordo com as Data Annotations configuradas no tipo Projeto.

Na listagem seguinte temos o resultado da execução desta Console Application (a partir do Visual Studio 2022 17.6.0 Preview 4.0), com as inconsistências encontradas destacadas em vermelho:

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

Este exemplo foi também disponibilizado no GitHub:

https://github.com/renatogroffe/DotNet8-ConsoleApp-DeniedValuesAttribute

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