Avatar billede rmjdk Nybegynder
29. april 2009 - 16:57 Der er 10 kommentarer

stoppe en foreach() i en switch() ?

Hej

jeg har en foreach som jeg vil kunne breake inde i en switch, er det muligt??

foreach(var obj in list)
{
    switch(obj)
    {
        case enum.Whatever:
        {
            // her vil jeg kunne breake min foreach, men break;    breaker switchen?
Avatar billede mcb2001 Nybegynder
29. april 2009 - 17:01 #1
smid eventuelt foreach'en ned i en metode for sig, og brug return?
Avatar billede arne_v Ekspert
29. april 2009 - 17:01 #2
Hvad med at krybe til korset og lave en god gammeldags goto ?
Avatar billede aaberg Nybegynder
29. april 2009 - 17:46 #3
Hvad med:

bool breakOut = false;

foreach(var obj in list)
{
    if (breakOut)
        break;
   
    switch(obj)
    {
        case enum.Whatever:
        {
            breakOut = true;
            break;
.....
Avatar billede lasserasch Juniormester
29. april 2009 - 17:56 #4
Er det et absolut must at du skal bruge et switch?

Hvad med f.eks. at skifte den ud med :

if (obj == enum.Whatever)
{ }
else if(obj == enum.Whatever2)
{ }


osv....


Mvh.
Lasse
Avatar billede rmjdk Nybegynder
30. april 2009 - 12:33 #5
Jeg kan generelt bedre lide switch'en til enums fremfor if().

goto? er det ikke et lævn fra batch dagene? :)

en bool er ikke så smart da løkken så skal køre nuværende iteration færdig.

Det må ende med at smide foreachen i en metode og bruge return... mcb giver du et svar?
Avatar billede mcb2001 Nybegynder
30. april 2009 - 12:38 #6
Tak :-)
Avatar billede arne_v Ekspert
30. april 2009 - 18:59 #7
goto gaar langt tilbage i tiden, men umiddelbart synes jeg at det var den meste klare loesning paa problemet.

  foreach(var obj in list)
  {
      switch(obj)
      {
          case enum.Whatever:
          {
              goto done;
          }
          ...
      }
      ...
  }
done:
  ...

Man har valgt at have goto i C# - og det er vel udfra en erkendelse af at nogen gange er det en OK loesning.
Avatar billede mcb2001 Nybegynder
30. april 2009 - 19:37 #8
goto er et levn fra funktionsbaseret programmering, og hører efter min mening ikke hjemme i objekt orienteret programmering.
Her bør man løse det med løkke, betingelser og metoder, basalt set...
Avatar billede mausing Nybegynder
04. maj 2009 - 21:08 #9
Måske dette var en løsning? :

for (i =0, i < obj.count, i++)
{

    switch (value)
    {      case 0:
          //HVis du vil ud af for staement her sæt tæller  til      obj.count + 1
          Break;
    }

}
next
Avatar billede arne_v Ekspert
05. juli 2009 - 19:31 #10
goto er et levn fra FØR PROCEDURAL PROGRAMMERING (der er ret stor forskel på procedural og funktionel programmering selvom procedurer og funktioner stort set er synonymer i mange sprog).

Men jeg synes at det er meget læsbart i denne kontekst. Og jeg kan ikke se hvorfor man ikke skulle bruge det.

Jeg synes f.eks. at det er nemmere at læse end Java's break labelled.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester