C # enum-Werte sind nicht auf die in der Definition aufgelisteten Werte beschränkt und können einen beliebigen Wert des Basistyps speichern. Wenn der Basistyp nicht definiert ist als Int32
oder einfach int
verwendet wird.
Ich entwickle einen WCF-Service, der sicher sein muss, dass einem Enum ein Wert zugewiesen ist, der dem Standardwert für alle Enums von 0 entspricht. Ich beginne mit einem Unit-Test, um herauszufinden, ob [Required]
den richtigen Job machen würde hier.
Tut es nicht, der zweite Test wirft keine Ausnahme.
Meine Frage ist: Gibt es ein Validator-Attribut, um zu überprüfen, ob der angegebene Wert in Enum.GetValues
?
Aktualisieren
Stellen Sie sicher, dass ValidateObject(Object, ValidationContext, Boolean)
mit dem letzten Parameter gleich True
anstelle von ValidateObject(Object, ValidationContext)
verwendet wird, wie in meinem Komponententest.
Es gibt EnumDataType in .NET4 + ...
Stellen Sie sicher, dass Sie den dritten Parameter validateAllProperties=true
im Aufruf von ValidateObject
Also aus Ihrem Beispiel:
%Vor%Sie suchen nach:
%Vor%[Update + 1]
Der Out-of-the-Box-Validator, der eine Vielzahl von Validierungen einschließlich dieser durchführt, heißt EnumDataType. Stellen Sie sicher, dass Sie validateAllProperties = true als ValidateObject festlegen, andernfalls wird Ihr Test fehlschlagen.
Wenn Sie nur überprüfen möchten, ob die Aufzählung definiert ist, können Sie einen benutzerdefinierten Validator mit der obigen Zeile verwenden:
%Vor%... aber ich nehme an, dass es nicht out of the box ist, oder?
Tags und Links c# enums data-annotations