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
.
Nouvelles propriétés dans .NET 8.0
Mourir [Range]
-Annotation a les propriétés supplémentaires dans .NET 8.0 MinimumIsExclusive
et MaximumIsExclusive
d’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.
Nouvelles annotations dans .NET 8.0
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!");
}
}
}
(moi)
#Nouveau #dans #.NET #Annotations #données #nouvelles #étendues
1707569412