Hallo,
ich habe innerhalb einer foreach-schleife ein Switch-Block. Jetzt würde ich gern im switch-block die foreach-schleife abbrechen .
Wenn ich im switch block jedoch break setze, denn gilt es natürlich für das switch und nicht für den foreach.
Gibt’s dafür eine Lösung
Betsen Dank antoschka
Ja, variable setzen und nach dem switchblock abfragen.
man kann aber auch den Schleifenzähler einfach auf die Abbruchsbedingung setzen:
for (int i = 0; i < 10; i++)
{
switch (whatever)
{
case "cancel":
i = 10;
break;
}
}
Weeks of programming can save you hours of planning
man kann aber auch den Schleifenzähler einfach auf die Abbruchsbedingung setzen:
for (int i = 0; i < 10; i++) { switch (whatever) { case "cancel": i = 10; break; } }
Foreach!?
Würde es auch machen wie's FZelle meint.
Tut mir leid, mein Fehler.
Bei foreach klappts natürlich nicht so!
Christian
Weeks of programming can save you hours of planning
Wenn dir das mit der Abbruchvariable nicht gefällt (was an sich in absolut IO ist) kannst du die for/foreach-Schleife auch in eine seperate Unterfunktion kapseln, und diese mit return statt mit break zu beenden
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
wahahaha.... ^^
an alle die jetzt spekulieren: macht das NICHT!
Hey - darauf hab ich gewartet 😁 Was soll, bitteschön, an einem doppelten break, einer zusätzlichen Variablen und einer weiteren Entscheidung besser sein?
kein goto == besser
Ein Axiom?
Man könnte auch einen try-Block um die Schleife legen, diesen von innerhalb mit "throw new Exception("raus hier")" verlassen und die Exception per catch ignorieren... (Das ist im Gegensatz zu dem obigen Vorschlag natürlich nicht ernst gemeint und soll nur zeigen, dass man einen hohen Aufwand betreiben kann, um ein einfaches goto zu vermeiden.)
Aber das soll's dazu gewesen, ich möchte auch keine Diskussion zu goto.
Hallo JAck30lena,
ein doublebreak (also ein break, das gleich zwei geschachtelte Konstrukte beendet) ist einer der wenigen legitimen Anwendungsfälle für goto und wäre hier die zu präferierende Lösung. Machen wir uns nichts vor. break und continue sind ja auch Sprünge; strukturierte Sprünge halt. Und damit legitim. Ein doublebreak wäre ein genauso legitimer Sprung. Leider gibt es diesen in C# nicht. Deshalb kann und sollte man hier goto als Ersatz verwenden.
Ich sehe das wie ujr, ein zweites break, eine zusätzliche Variable und eine weitere Entscheidung macht die Sache nicht besser, sondern nur unnötig kompliziert.
herbivore
Hallo JAck30lena,
mir wäre auch lieber, wenn eine doublebreak - wie das z.B. in Perl der Fall ist - ein Teil der Sprache wäre. Da das aber nicht der Fall ist, muss man aber so oder so eine alternative Vorgehensweise wählen.
Sicher ist goto (leider) eine Glaubensfrage. Ich würde einfach für einen rationalen Umgang damit plädieren. Das würde heißen, goto nur in wenigen, genau definierten Ausnahmefällen auf genau definierte Weise verwenden.
herbivore