.NET 8.0'da yeni [9]: Yeni ve genişletilmiş verilerin ek açıklamaları

Womanne

Member
İsimler alanındaki verilerin ek açıklaması System.ComponentModel.DataAnnotations Klasik .NET çerçevesinden dolaşımdadır. Birincisi [RegularExpression],, [Range] VEYA [DataType] .NET Framework 3.5'te tanıtıldı. .NET Framework 4.0 (ör. [Display] VE [Editable]) ve .NET Framework 4.5 (ör. [MaxLength],, [Compare],, [CreditCard] VE [Phone]). Bu verilerin ek açıklaması sınıflarda, özelliklerde veya alanlarda kullanılabilir. Sunumu belirtmeye hizmet ederler (ör. [Display] VE [Editable]) veya değerlerin doğrulanması (ör. [RegularExpression],, [Compare],, [Range],, [Phone] VE [CreditCard]). GUI kontrolleri ilgili ek açıklamaları dikkate almalıdır.

Sunumun sunumlarını dikkate alan sadece birkaç kontrol vardır -özellikle .NET geliştiricileri, notlarda depolanan meta veriler temelinde yürütme sırasında anında bir grafik kullanıcı arayüzü oluşturan kontroller oluşturur. Doğrulama ek açıklamaları söz konusu olduğunda, notları dikkate alan daha fazla kontrol vardır, ayrıca <InputText>,, <InputNumber> VE <InputDate> Blazor'da. Doğrulama, program kodundaki bir kontrol öğesinden bağımsız olarak gerçekleştirilebilir. Ayrıca dersler var ValidationContext,, Validator,, ValidationResult VE ValidationException.

.NET 8.0'daki yeni özellikler


. [Range]-Notation'ın .NET 8.0'da ek özellikleri var MinimumIsExclusive VE MaximumIsExclusiveYukarıdaki sınırı ve daha yüksek olanı geçerli değerler olarak hariç tutmak için. Standart, sınırlar dahil edilmeden önce.

.NET 8.0'da yeni ek açıklamalar


Buna ek olarak, Microsoft üç yeni ek açıklama sınıfı ekledi:

  • Yeni ek açıklama [Length] Nesne miktarlarının minimum ve maksimum uzunluğunu ve karakterlerin zincirlerini ayarlamak için kullanılabilir.
  • Yeni ek açıklama ile [Base64String] Bir karakter zinciri olup olmadığını kontrol edin 64 44.
  • İle [AllowedValues] VE [DeniedValues] Bir nesnenin özellikleri için izin verilen değerler listesi belirtilebilir. Bununla birlikte, bu sadece bireysel kendi veya alanlardaki değerler için çalışır; Ne yazık ki, bu iki ek açıklama nesne miktarları üzerinde çalışmaz.
Bir sonraki liste, sınıfa dayalı tüm yeni ek açıklama özelliklerinin önemli bir örneğini göstermektedir. SoftwareArchitect Bazı tesislerle not edildi. Doğrulama sınıflarla gerçekleştirilir ValidationContext VE Validator.


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

namespace NET8_Console.FCL_Annotations;

/// <summary>
/// Neue und erweiterte Annotationen zur Validierung
/// </summary>
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<string> 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<string> 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<ValidationResult>();

// 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!");
}
}
}








.NET 8.0 ile yukarıdaki listede program kodunu gerçekleştirirken, altı doğrulama hatası vardır


(Resim: Holger Schwichtenberg'in ekran görüntüsü)




(RME)
 
Üst