Nouvelles Du Monde

Nouveau dans .NET 8.0 [9]: Annotations de données nouvelles et étendues

Nouveau dans .NET 8.0 [9]: Annotations de données nouvelles et étendues

2024-02-09 17:33:00

L’annotation des données dans l’espace de noms System.ComponentModel.DataAnnotations existe depuis le .NET Framework classique. Le premier aime [RegularExpression], [Range] ou [DataType] ont été introduits dans .NET Framework 3.5. D’autres annotations de données ont suivi dans .NET Framework 4.0 (par ex. [Display] et [Editable]) et .NET Framework 4.5 (par exemple B. [MaxLength], [Compare], [CreditCard] et [Phone]). Cette annotation de données peut être utilisée sur des classes, des propriétés ou des champs. Ils servent à préciser la représentation (par ex. [Display] et [Editable]) ou la validation de valeurs (ex. [RegularExpression], [Compare], [Range], [Phone] et [CreditCard]). Les contrôles GUI doivent respecter les annotations appropriées.

Publicité

Seuls quelques contrôles prennent en compte les annotations d’affichage – les développeurs .NET créent généralement leurs propres contrôles qui créent une interface utilisateur graphique à la volée lors de l’exécution en fonction des métadonnées stockées dans les annotations. Avec les annotations de validation, il existe davantage de contrôles qui prennent en compte les annotations, notamment , et à Blazor. Une validation peut également être effectuée indépendamment d’un contrôle dans le code du programme. C’est à ça que servent les cours ValidationContext, Validator, ValidationResult et ValidationException.

Mourir [Range]-Annotation a les propriétés supplémentaires dans .NET 8.0 MinimumIsExclusive et MaximumIsExclusived’exclure les limites inférieure et supérieure mentionnées elles-mêmes comme valeurs valides. Comme auparavant, la norme est que les limites soient incluses.

Microsoft a également ajouté trois nouvelles classes d’annotations :

  • La nouvelle annotation [Length] peut être utilisé pour définir la longueur minimale et maximale des ensembles d’objets et des chaînes.
  • Avec la nouvelle annotation [Base64String] vous vérifiez si une chaîne de caractères est codée en Base64.
  • Avec [AllowedValues] et [DeniedValues] Vous pouvez spécifier une liste de valeurs autorisées pour les propriétés d’un objet. Cependant, cela ne fonctionne que pour les valeurs des propriétés ou des champs individuels ; Malheureusement, ces deux annotations ne fonctionnent pas lorsqu’elles sont appliquées à des ensembles d’objets.

La liste suivante montre un exemple significatif de toutes les nouvelles fonctionnalités d’annotation basées sur la classe SoftwareArchitect avec quelques propriétés annotées. La validation s’effectue auprès des classes ValidationContext et Validator.

using System.ComponentModel.DataAnnotations;
using System.Diagnostics;
using ITVisions;
using NET8_Console.CustomAnnotations;

namespace NET8_Console.FCL_Annotations;
 
/// 
/// Neue und erweiterte Annotationen zur Validierung
/// 
public class SoftwareArchitect
{
 // Neu in .NET 8.0 --> Nicht als Anrede erlaubt:
 [DeniedValues("", "Dr.", "Prof. Dr.")] 
 public string? Anrede { get; set; }
 
 // Neu in .NET 8.0 --> Erlaubte Titel:
 [AllowedValues("", "Dr.", "Prof. Dr.")] 
 public string? Titel { get; set; }
 
 // funktioniert hier nicht, da es sich um eine Liste handelt:
 [AllowedValues("C#", "Java", "JavaScript")] 
 public List Sprachen { get; set; } = new();
 
 // Neu in .NET 8.0: Unter- und Obergrenze für Zeichenkettenlänge:
 [Length(2, 50)] 
 public string? Name { get; set; }
 
 // Neu in .NET 8.0: Unter- und Obergrenze für Mengenlänge:
 [Length(0, 3)] 
 public List Websites { get; set; } = new();
 
 // Neu in .NET 8.0:
 [Base64String] 
 public string? Token { get; set; }
 
 // MinimumIsExclusive und MaximumIsExclusive 
 // sind neu seit .NET 8.0
 // > 0 und < 120 statt >= und <=:
 [Range(0d, 120d, MinimumIsExclusive = true, 
        MaximumIsExclusive = true)] 
 public double Alter { get; set; }
 #endregion
}
 
public class FCL_Annotations_Demo
{
 
 public void Run()
 {
  CUI.H2(nameof(FCL_Annotations_Demo));
 
  // Das zu validierende Objekt erstellen
  SoftwareArchitect hs = new()
  {
   Name = "Holger Schwichtenberg",
   Titel = "Doktor",
   Anrede = "",
   Token = "unsinn"
  };
  hs.Websites.Add("www.IT-Visions.de");
  hs.Websites.Add("www.dotnet-doktor.de");
  hs.Websites.Add("www.entwickler-lexikon.de");
  hs.Websites.Add("www.dotnet7.de");
  hs.Websites.Add("www.dotnet8.de");
  hs.Sprachen.Add("C#");
  hs.Sprachen.Add("JavaScript");
  hs.Sprachen.Add("TypeScript");
 
  // Validierung vorbereiten
  var ctx = new ValidationContext(hs);
  var results = new List();
 
  // Validierung durchführen
  if (!Validator.TryValidateObject(hs, ctx, results, true))
  {
   CUI.Error($"{results.Count} errors validating the objects:");
   // Fehler ausgeben
   foreach (var validationResult in results)
   {
    CUI.LI(validationResult.ErrorMessage, ConsoleColor.Red);
   }
  }
  else
  {
   // Es war alles OK
   CUI.Success("Validation succeeded!");
  }
 }
}

Lors de l’exécution du code du programme dans la liste ci-dessus avec .NET 8.0, six erreurs de validation se produisent

(Image : capture d’écran de Holger Schwichtenberg)


(moi)

Vers la page d’accueil



#Nouveau #dans #.NET #Annotations #données #nouvelles #étendues
1707569412

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Un F16 s’est écrasé à Halkidiki, le pilote est sain et sauf

F-16 ©Eurokinissi ” )+(“arrêter\”> “).length); //déboguer contenttts2=document.querySelector(“.entry-content.single-post-content”).innerHTML.substring( 0, document.querySelector(“.entry-content.single-post-content “).innerHTML.indexOf( “” )); contenttts2=contenttts2.substring(contenttts2.indexOf( “fa-stop\”> ” )+(“arrêter\”> “).length);

ADVERTISEMENT