Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Neu in .NET 10.0 [33]: Verbesserungen bei ValidationContext

Дата публикации: 24-07-2026 07:46:00

ValidationContext funktioniert nun auch mit dem Native AOT-Compiler.

Основное содержимое страницы с новостью.

Die .NET-Klasse System.ComponentModel.DataAnnotations.ValidationContext verwendet bisher sogenannte „Unbound Reflection“ (Reflection auf einem Typ, der zur Compile-Zeit nicht bekannt ist), um bei dem zu validierenden Objekt die Annotation [DisplayName] zu suchen.

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Das funktioniert aber nicht mit dem NativeAOT-Compiler.

Screenshot

Bisher erschien eine Warnung beim Einsatz von ValidationContext bei Native AOT-Kompilierung (Abb. 1).

Eine neue Überladung löst das Problem: Man kann nun den Displayname als Parameter beim Konstruktor angeben:

var context = new ValidationContext(person, "PersonObjekt", null, null);

Folgendes Codebeispiel zeigt den Einsatz von ValidationContext:

using System.ComponentModel.DataAnnotations;
using ITVisions;
 
namespace NET10_Console;
internal class FCL10_ValidationContext
{
 [Display(Name = "Personobjekt")]
 public class Person
 {
  [Range(1, Int32.MaxValue)]
  [Display(Name = "Person-ID")]
  public int ID { get; set; }
 
  [Required]
  [Display(Name = "Person-Name")]
  public string Name { get; set; }
 
  [Range(0, 120)]
  [Display(Name = "Person-Age")]
  public int Age { get; set; }
 }
 
 public void Run()
 {
  CUI.Demo(nameof(FCL10_ValidationContext));
 
  var person = new Person { ID = 0, Name = "", Age = 150 }; // absichtlich ungültig
 
  //var context = new ValidationContext(person); // Dieser Konstruktor wird via Reflection [Display] suchen
  var context = new ValidationContext(person, "Person-Objekt", null, null); // Dieser neue Konstruktor funktioniert auch mit AOT
  var results = new List<ValidationResult>();
 
  bool isValid = Validator.TryValidateObject(person, context, results, validateAllProperties: true);
 
  if (!isValid)
  {
   CUI.LineRed("Validierungsfehler bei " + context.DisplayName + "");
   foreach (var validationResult in results)
   {
    CUI.LI(validationResult.ErrorMessage);
   }
  }
  else
  {
   CUI.Success($"{context.DisplayName} ist gültig.");
  }
 }
}

Screenshot

Ausgabe des Codebeispiels (Abb. 2)

(rme)

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Бенчмаркая Regex: конструктор показал 10 мкс, первый вызов — 1307019.3126-07-2026
2Бенчмаркая Regex: конструктор показал 10 мкс, первый вызов — 1307019.3126-07-2026
3Бенчмаркая Regex: конструктор показал 10 мкс, первый вызов — 1307019.3126-07-2026
4GitLab 19.2, Kotlin feiert Geburtstag, Unity CLI014.4925-07-2026
5Sicherheitsupdate n8n: Accountübernahme und Sandboxausbruch möglich013.1324-07-2026
6Adobe camera app’s new feature will critique your photos using AI08.6220-07-2026
7iOS 26.6, macOS 26.6 und mehr: Apple stellt neue Betriebssysteme bereit013.227-07-2026
8Anonymisierendes Linux Tails 7.10: Neuer Shutdown und Videoplayer017.3623-07-2026
9В России ввели новые обязательные и дополнительные реквизиты кассового чека0031-08-2025
10ROSEN extends RoCorr MFL-A service portfolio with MFL-A Plus performance specifications017.4721-07-2026

Классификация: Пресс-релизы. Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 26.37. Источник: www.heise.de.