.NET 8.0'daki yenilikler [9]: Yeni ve genişletilmiş veri açıklamaları

Womanne

Member
Ad alanındaki verilere ilişkin açıklama System.ComponentModel.DataAnnotations klasik .NET Framework'ten beri var. birinci olanı beğendim [RegularExpression], [Range] VEYA [DataType] .NET Framework 3.5'te tanıtıldı. .NET Framework 4.0'da takip edilen ek veri açıklamaları (ör. [Display] VE [Editable]) ve .NET Framework 4.5 (ör. [MaxLength], [Compare], [CreditCard] VE [Phone]). Bu veri açıklaması sınıflarda, özelliklerde veya alanlarda kullanılabilir. Gösterimi belirtmeye yararlar (örn. [Display] VE [Editable]) veya değerlerin doğrulanması (örn. [RegularExpression], [Compare], [Range], [Phone] VE [CreditCard]). GUI kontrolleri uygun açıklamalara uymalıdır.

Duyuru



Görünüm açıklamalarını dikkate alan yalnızca birkaç kontrol vardır: .NET geliştiricileri genellikle, ek açıklamalarda depolanan meta verilere dayanarak çalışma zamanında anında grafiksel bir kullanıcı arayüzü oluşturan kendi kontrollerini oluştururlar. Doğrulama ek açıklamalarında, ek açıklamaları dikkate alan birden fazla kontrol vardır; <InputText>, <InputNumber> VE <InputDate> Blazers'da. Doğrulama, program kodundaki kontrolden bağımsız olarak da gerçekleştirilebilir. Dersler bunun içindir ValidationContext, Validator, ValidationResult VE ValidationException.

.NET 8.0'daki yeni özellikler


THE [Range]– Ek açıklamanın .NET 8.0'da ek özellikleri vardır MinimumIsExclusive VE MaximumIsExclusiveGeçerli değerler olarak belirtilen alt ve üst limitleri hariç tutmak. Daha önce olduğu gibi standart, sınırların dahil edilmesidir.

.NET 8.0'daki yeni açıklamalar


Microsoft ayrıca üç yeni açıklama sınıfı ekledi:

  • Yeni ek açıklama [Length] nesne kümelerinin ve dizelerinin minimum ve maksimum uzunluğunu ayarlamak için kullanılabilir.
  • Yeni açıklamayla [Base64String] bir karakter dizisinin Base64 ile kodlanmış olup olmadığını kontrol eder.
  • İle [AllowedValues] VE [DeniedValues] Bir nesnenin özellikleri için izin verilen değerlerin bir listesini belirleyebilirsiniz. Ancak bu yalnızca bireysel özellikler veya alanlardaki değerler için işe yarar; Ne yazık ki bu iki açıklama nesne kümelerine uygulandığında çalışmaz.
Sonraki liste, tüm yeni sınıf tabanlı açıklama özelliklerinin önemli bir örneğini göstermektedir SoftwareArchitect bazı özelliklere dikkat çekilmiştir. Doğrulama sınıflarla yapılır 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!");
}
}
}








Önceki listedeki program kodunu .NET 8.0 ile çalıştırdığınızda altı doğrulama hatası oluşuyor


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




(kendim)



Haberin Sonu
 
Üst