.NET

25 abr, 2023

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

Publicidade

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 (namespaceSystem.ComponentModel.DataAnnotations) foi invocado, retornando informações sobre inconsistências de acordo com as Data Annotationsconfiguradas 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!

*O conteúdo deste artigo é de responsabilidade do(a) autor(a) e não reflete necessariamente a opinião do iMasters.