Moin.
Gibt es andere Lösungsvorschläge und wenn ja, was ist daran besser als bei meiner Implementation?
Falls ich den Code richtig verstanden haben, kann deine answers-Liste durch eine einfache boolsche Variable ersetzt werden:
void AddElement(Element element) {
bool vetoed = false;
foreach(Constraint constraint in this.Constraints) {
switch(constraint.Satisfies(element, this)) {
case Constraint.Results.Allowed:
goto AddElement;
case Constraint.Results.Veto:
vetoed = true;
break;
case Constraint.Results.Vote:
case Constraint.Results.IgnoreMe:
break;
default:
throw new NotSupportedException();
}
}
if(vetoed) throw new ArgumentException(
"Can't add element due to constraint restrictions.");
AddElement:
this.elements.Add(element);
}
Den Test if(vetoed)
könnte man auch hinter die Sprungmarke verschieben, dann müsste man im Fall Constraint.Results.Allowed
noch vetoed = false
ergänzen; der Algorithmus wäre in diesem Fall eine 1:1-Übersetzung deiner Version.
Christoph