Eine Beispielklasse im "C# Class Desing Handbook" (S. 137) ruft die Klassenvalidierungsmethode für ein bestimmtes Feld nicht innerhalb des Konstruktors nur für Klassen auf. Die Beispielklasse ermöglicht es Ihnen also, ein Objekt mit ungültigen Daten zu erstellen und nur dann einen Fehler für diese Daten zu erzeugen, wenn Sie die Eigenschaft des Feldes aufrufen, die dann die Validierung durchführt. Du hast also ein schlechtes Objekt und weißt es erst nachher.Konstruktordaten validieren
Ich habe nie verstanden, warum sie nicht einfach die Eigenschaft vom Konstruktor aufrufen und sofort einen Fehler auslösen, wenn während der Initialisierung fehlerhafte Daten gefunden werden? Ich habe sie ohne Erfolg gemailt ...
Ich neige dazu, das folgende Format zu verwenden, indem ich meine Eigenschaften von meinen Konstruktoren aufrufe - ist diese richtige Struktur, um Initialisierungsdaten zu validieren?
tyclass Foo
{
private string _emailAddress;
public Foo(string emailAddress)
{
EmailAddress = emailAddress;
}
public string EmailAddress
{
get { return _emailAddress; }
set
{
if (!ValidEmail(value))
throw new ArgumentException
(string.Format
("Email address {0} is in wrong format",
value));
_emailAddress = value;
}
}
private static bool ValidEmail(string emailAddress)
{
return Regex.IsMatch
(emailAddress, @"\b[A-Z0-9._%+-]+" +
@"@[A-Z0-9.-]+\.[A-Z]{2,4}\b",
RegexOptions.IgnoreCase);
}
}
Dies sollte wahrscheinlich eine Gemeinschaftsfrage sein - könnte jemand bitte richtig einstellen, wenn ja. – user10178