Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C#: switch-Anweisung hat Probleme bei default (https://www.delphipraxis.net/45500-c-switch-anweisung-hat-probleme-bei-default.html)

JasonDX 7. Mai 2005 12:41


C#: switch-Anweisung hat Probleme bei default
 
Ich habe folgende switchanweisung in C#:
Code:
switch (Data[i].ToCharArray()[0]) //Data ist string[]
{
  case '>':
  {
    if (CurrentNode != null)
    {
      CurrentNode = CurrentNode.AddKid(new cNode());
    }
    else
    {
      CurrentNode = new cNode();
    }
  } break;
  case '<':
  {
    CurrentNode = CurrentNode.Parent;
  } break;
  default:
  {
    CurrentNode.Pos = new cVector(Data[i++]);
    CurrentNode.Dir = new cVector(Data[i]);
//    break;
  }
}
Wenn ich das jetzt in #Develop kompilieren will, kriege ich diese Fehlermeldung:
Compilermeldung

Control cannot fall through from one case label ('default:') to another(CS0163)


Wenn ich jedoch die Kommentarzeichen beim letzten break wegtu, klappts perfekt. Wieso?

Johnny_W 7. Mai 2005 12:49

Re: C#: switch-Anweisung hat Probleme bei default
 
Hiho,

Weil das Switchstatement so definiert ist unter C#.


Siehe C# Programmer Reference:

Delphi-Quellcode:
switch (expression)
{
   case constant-expression:
      statement
      jump-statement //break; continue; return; etc..
   [default:
      statement
      jump-statement]
}
MfG:)

JasonDX 7. Mai 2005 12:53

Re: C#: switch-Anweisung hat Probleme bei default
 
oh, thx!

Wieso wurde die sprung-anweisung am ende noch eingefügt?
Oder anders formuliert: Wieso wurde sie nicht so gelassen, wie sie unter C/C++ war?

Khabarakh 7. Mai 2005 12:57

Re: C#: switch-Anweisung hat Probleme bei default
 
Das ist die Regel des "Nichtdurchfallens" :mrgreen: .
Zitat:

Die "Regel des Nichtdurchfallens" verhindert eine häufig vorkommende Art von Fehlern, die in C und C++ auftreten, wenn break-Anweisungen versehentlich weggelassen werden.

Robert_G 7. Mai 2005 12:59

Re: C#: switch-Anweisung hat Probleme bei default
 
Zitat:

Zitat von Chimaira
oh, thx!

Wieso wurde die sprung-anweisung am ende noch eingefügt?
Oder anders formuliert: Wieso wurde sie nicht so gelassen, wie sie unter C/C++ war?

Weil sie fehleranfällig war.
In C# musst du explizit durchfallen. Ein vergessener Sprung führt zum Kompilierfehler. :)
Ein break bei default würde IMHO keinerlei Sinn machen. Schließlich hat der Ausdrcuk keinem case entsprochen. Wohin sollte er denn durchfallen? -> Man braucht also kein break ;)

Johnny_W 7. Mai 2005 13:13

Re: C#: switch-Anweisung hat Probleme bei default
 
Hiho,

Nunja gedacht haben sie sich dabei sicherer zu werden, so daß wenn ein case-statement ausgelöst wurde kein anderes statement ausgelöst wird, ein sogenannter "Fall-Through".
Deswegen erzwingt der Compiler ein Jump-Statement.
Eine Ausnahme gibt es:

Delphi-Quellcode:
switch(person)
{
  case "Robert_G":
  case "Chimaira":
      antwort= "Hallo Robert_G und Chimaira";
      break;
  ...usw.
}
Man kann noch so "schön" mit goto arbeiten, aber da lass ich jetzt die Finger von :mrgreen:

MfG :)

JasonDX 7. Mai 2005 13:25

Re: C#: switch-Anweisung hat Probleme bei default
 
Zitat:

Zitat von Robert_G
In C# musst du explizit durchfallen. Ein vergessener Sprung führt zum Kompilierfehler. :)

Ich habs bemerkt :mrgreen:
Zitat:

Zitat von Robert_G
Ein break bei default würde IMHO keinerlei Sinn machen. Schließlich hat der Ausdrcuk keinem case entsprochen. Wohin sollte er denn durchfallen? -> Man braucht also kein break ;)

Hinschreiben muss ich trotzdem eins, weil ich sonst die oben genannte Fehlermeldung krieg :gruebel:
Ich find das ganze ziemlich seltsam, weil im default ein break... :gruebel:

Robert_G 7. Mai 2005 13:27

Re: C#: switch-Anweisung hat Probleme bei default
 
Zitat:

Zitat von Chimaira
Hinschreiben muss ich trotzdem eins, weil ich sonst die oben genannte Fehlermeldung krieg :gruebel:
Ich find das ganze ziemlich seltsam, weil im default ein break... :gruebel:

Ist dumm, aber nunja ... shit happens. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz