AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C#: switch-Anweisung hat Probleme bei default
Thema durchsuchen
Ansicht
Themen-Optionen

C#: switch-Anweisung hat Probleme bei default

Ein Thema von JasonDX · begonnen am 7. Mai 2005 · letzter Beitrag vom 7. Mai 2005
Antwort Antwort
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#1

C#: switch-Anweisung hat Probleme bei default

  Alt 7. Mai 2005, 13:41
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?
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Johnny_W

Registriert seit: 27. Apr 2005
33 Beiträge
 
Delphi 2005 Personal
 
#2

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

  Alt 7. Mai 2005, 13:49
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
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

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

  Alt 7. Mai 2005, 13:53
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?
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

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

  Alt 7. Mai 2005, 13:57
Das ist die Regel des "Nichtdurchfallens" .
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

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

  Alt 7. Mai 2005, 13:59
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
  Mit Zitat antworten Zitat
Johnny_W

Registriert seit: 27. Apr 2005
33 Beiträge
 
Delphi 2005 Personal
 
#6

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

  Alt 7. Mai 2005, 14:13
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

MfG
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#7

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

  Alt 7. Mai 2005, 14:25
Zitat von Robert_G:
In C# musst du explizit durchfallen. Ein vergessener Sprung führt zum Kompilierfehler.
Ich habs bemerkt
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
Ich find das ganze ziemlich seltsam, weil im default ein break...
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

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

  Alt 7. Mai 2005, 14:27
Zitat von Chimaira:
Hinschreiben muss ich trotzdem eins, weil ich sonst die oben genannte Fehlermeldung krieg
Ich find das ganze ziemlich seltsam, weil im default ein break...
Ist dumm, aber nunja ... shit happens.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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