Novidades do .NET 8: definindo valores não permitidos com DeniedValuesAttribute
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:
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!