Hallo zusammen!
Ich versuche gerade folgenden Beispielcode von Stack Overflow für Validatoren zu adaptieren:
https://stackoverflow.com/questions/4776396/validation-how-to-inject-a-model-state-wrapper-with-ninject
Was mich mittlerweile in den Wahnsinn treibt, ist folgende Klasse:
public class ValidationException : Exception
{
public ValidationException(IEnumerable<ValidationResult> r)
: base(GetFirstErrorMessage(r))
{
this.Errors =
new ReadOnlyCollection<ValidationResults>(r.ToArray());
}
public ReadOnlyCollection<ValidationResults> Errors { get; private set; }
private static string GetFirstErrorMessage(
IEnumerable<ValidationResult> errors)
{
return errors.First().Message;
}
}
ReadOnlyCollection<ValidationResults> ist im Namespace System.Collections.ObjectModel und hat aber einen c-tor
ReadOnlyCollection<T> Constructor (IList<T>)
Sollte erst kein Problem, weil Ilist von ziemlich allen Schnittstellen erbt:
public class ReadOnlyCollection<T> : IList<T>, ICollection<T>,
IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>,
IReadOnlyCollection<T>
https://msdn.microsoft.com/en-us/library/ms132474(d=printer,v=vs.110).aspx
theoretisch ...
Nun, der Autor auf SOF will mittels
public ValidationException(IEnumerable<ValidationResult> r)
: base(GetFirstErrorMessage(r))
ein <Schlüssel, Errormessage> Paar aus IEnumerableT> generieren:
public static void AddModelErrors(this ModelStateDictionary state,
ValidationException exception)
{
foreach (var error in exception.ValidationErrors)
state.AddModelError(error.Key, error.Message);
}
Dafür hat er in
this.Errors =
new ReadOnlyCollection<ValidationResults>(r.ToArray());
das C-tor attribut vom PType IList<T> als Type IEnumable<T>.ToArry() "konvertiert",
was mit VS nach Strich und Faden um die Ohren Klatscht!!> Fehlermeldung:
Fehler CS1503 Argument "1": Konvertierung von "ValidationResult[]" in "System.Collections.Generic.IList<ValidationResults>" nicht möglich.
Da der Code des Autos aus 2011 stammt und 58 Improvals hat und auch recht stark aussieht, wollte ich euch fragen, welcher Film hier läuft:
Vielen Dank!
Dann probiere mal
this.Errors = new ReadOnlyCollection<ValidationResults>(r.ToList());
Wo ist denn die Klasse ValidationResults
definiert?
Ich tippe auf einen schnöden Schreibfehler und es muss überall von ValidationResults
nach ValidationResult
geändert werden.
😉
@Th69
Ein array implementiert auch IList 😉
Upps: ValidationResult <-> ValidationResults hatte ich nicht gesehen.
Jooh! Danke! 😉
Ich habe in meinen alten Code ValidationResults, deshalb war der Fehler nicht aufgefallen.
Booh! Seit Ihr schnell! 👍 👍
Wichtige Randnotiz:
:NET kennt bereits eine
ValidationResult Class
https://msdn.microsoft.com/en-us/library/system.windows.controls.validationresult(v=vs.110).aspx
Ich, wie wahrscheinlich der Autor, haben ValidationResults gebildet, damit wir nicht in Konflikt mit der bestehenden Definition kommen.