Christoph: Pro/Contra Break in Schleifen

Beitrag lesen

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