Autor Beitrag
TheSoul
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 73
Erhaltene Danke: 2

Win 95, Win 98, WIN 2000, Win XP, Win Vista, Win 7
Visual C#
BeitragVerfasst: Do 04.11.10 11:49 
Hallo zusammen

Ich habe eine Switch-Case Anweisung in einer ForEach-Schleife. Wenn ein Case ausgeführt wird, gibt es ein "break". Dieser "break" bewirkt aber nur, dass es aus dem Switch ausspringt.

Gibt es eine Möglichkeit, wenn ein Case ausgeführt wird, die Foreach Schleife abzubrechen?


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 foreach ( string roleId in arrayIdRoles)
            {
                switch (Convert.ToInt32(roleId))
                {
                    case 1:
                        liBen.Visible = true;
                        liPla.Visible = true;
                        liOE.Visible = true;
                        break;
                    case 2:
                        liBen.Visible = true;
                        liPla.Visible = true;
                        liOE.Visible = false;
                        break;
                    case 3:
                        liBen.Visible = true;
                        liPla.Visible = false;
                        liOE.Visible = false;
                        break;

                    defaultbreak;
                }
            }


Danke im Voraus für eure Hilfe

_________________
Fluchen ist die einzige Sprache, die alle Programmierer wirklich beherrschen.
Ich würd so gern die Welt verändern, aber Gott gibt mir den Quellcode nicht
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 04.11.10 13:09 
Du kannst in den case-Zweigen eine bool'sche Variable setzen, die besagt, ob die Schleife abgebrochen werden soll. Nach der switch-Anweisung wertest du diese aus und führst ggf. ein break aus.

Für diesen Beitrag haben gedankt: TheSoul
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: Do 04.11.10 13:26 
Stichwort heißt "Goto". Bitte jetzt keine Diskussionen über das "böse Wort", es ist an dieser Stelle die einzig performante Variante, selbst in der MSDN werden bei dem GOTO Beispiel verschachtelte Schleifen angegeben.


Ontopic:
@The Soul: Schau dir den MSDN Link einfach an.

Für diesen Beitrag haben gedankt: TheSoul
TheSoul Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 73
Erhaltene Danke: 2

Win 95, Win 98, WIN 2000, Win XP, Win Vista, Win 7
Visual C#
BeitragVerfasst: Do 04.11.10 15:17 
Danke für die Antworten!

Meine Lösung:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
bool stoploop = false;
            foreach ( string roleId in arrayIdRoles)
            {
                if (!stoploop) 
                {
                    switch (Convert.ToInt32(roleId))
                    {
                        case 1:
                            liBen.Visible = true;
                            liPla.Visible = true;
                            liOE.Visible = true;
                            stoploop = true;
                            break;
                        case 2:
                            liBen.Visible = true;
                            liPla.Visible = true;
                            liOE.Visible = false;
                            stoploop = true;
                            break;
                        case 3:
                            liBen.Visible = true;
                            liPla.Visible = false;
                            liOE.Visible = false;
                            stoploop = true;
                            break;

                        defaultbreak;
                    }
                }
            }



Funktioniert soweit ganz gut.

Das Programm wird nun erweitert, sollte später komplizierter werden. Also möglich, dass diese eher "unsaubere" Lösung verändert werden muss.

@Greenberet: Danke für den Hinweis!

_________________
Fluchen ist die einzige Sprache, die alle Programmierer wirklich beherrschen.
Ich würd so gern die Welt verändern, aber Gott gibt mir den Quellcode nicht
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 04.11.10 16:21 
user profile iconGreenberet hat folgendes geschrieben Zum zitierten Posting springen:
Bitte jetzt keine Diskussionen über das "böse Wort"
Oh doch, denn normalerweise suchen wir eher nach lesbarem als mikrooptimiertem Code. Und wen wirklich die zusätzliche Variable stört, der greife zur imo sowieso schöneren Lösung: Den switch-Block in eine neue Methode auslagern und darin return benutzen.

user profile iconGreenberet hat folgendes geschrieben Zum zitierten Posting springen:
selbst in der MSDN werden bei dem GOTO Beispiel verschachtelte Schleifen angegeben.
Irgend ein Beispiel müssen sie ja angeben :P .

_________________
>λ=
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: Do 04.11.10 16:53 
[quote="user profile iconKha"(622706)]
user profile iconGreenberet hat folgendes geschrieben Zum zitierten Posting springen:
Bitte jetzt keine Diskussionen über das "böse Wort"
Oh doch, denn normalerweise suchen wir eher nach lesbarem als mikrooptimiertem Code. Und wen wirklich die zusätzliche Variable stört, der greife zur imo sowieso schöneren Lösung: Den switch-Block in eine neue Methode auslagern und darin return benutzen.
Also das Goto unlesbar ist...ist aus einer Zeit wo man noch aus funktionen rausspringen konnte. In C# ist man an die aktuelle Methode gebunden, mit anderen Worten: Goto ist in C# lesbar ;). Wäre es auch in C/C+ wenn mans richtig verwenden würd.
Die Goto Variante ist halt das Gegenstück zu den labeled Loops in Java.

Btw. das Beispiel mit der Funktion am besten gleich wieder streichen. Spätestens bei Verschachtelung im 4ten Grad ist die lesbarkeit mit den Funktionen bei 0.