Laden...

break für foreach aus einer switch anweisung

Erstellt von antoschka vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.410 Views
A
antoschka Themenstarter:in
371 Beiträge seit 2007
vor 15 Jahren
break für foreach aus einer switch anweisung

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

F
10.010 Beiträge seit 2004
vor 15 Jahren

Ja, variable setzen und nach dem switchblock abfragen.

5.657 Beiträge seit 2006
vor 15 Jahren

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

296 Beiträge seit 2007
vor 15 Jahren

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.

5.657 Beiträge seit 2006
vor 15 Jahren

Tut mir leid, mein Fehler.

Bei foreach klappts natürlich nicht so!

Christian

Weeks of programming can save you hours of planning

U
1.688 Beiträge seit 2007
vor 15 Jahren

"goto" hinter das Ende der Schleife

Gelöschter Account
vor 15 Jahren

"goto" hinter das Ende der Schleife

wahahaha.... ^^
an alle die jetzt spekulieren: macht das NICHT!

es soll jetzt keine diskussion über goto entbrennen. wenn jemand bedürfniss hat das zu diskutieren, soll er bitte einen neuen thread aufmachen.

3.971 Beiträge seit 2006
vor 15 Jahren

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...

U
1.688 Beiträge seit 2007
vor 15 Jahren

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?

Gelöschter Account
vor 15 Jahren

kein goto == besser. die variable tut nicht weh und beeinflusst die performance ausschließlich im rein theoretischem bereich.

aber bitte keine diskussion über goto anfachen.

U
1.688 Beiträge seit 2007
vor 15 Jahren

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.

49.485 Beiträge seit 2005
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

ich sehe aber einen psychologischen effekt. daher würde ich bei mir dennoch die variante mit dem bool bevorzugen.

49.485 Beiträge seit 2005
vor 15 Jahren

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

W
558 Beiträge seit 2006
vor 15 Jahren

Gibts bereits: Schwächen der C#-Sprache