Entwickler-Ecke

C# - Die Sprache - switch


ene - Fr 31.07.09 08:57
Titel: switch
Moin,

kann man mit switch auch Wertebereiche verwenden?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
switch (i)
{
  case (i < 10):
      //
    break;
  case (i > 10 && i < 20)
      //
    break;
}



Moderiert von user profile iconChristian S.: Topic aus Basistechnologien verschoben am Fr 31.07.2009 um 09:31
Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Christian S. - Fr 31.07.09 09:35

Hi!

Das ist mir in C# leider noch nicht untergekommen, Delphi Prism könnte das natürlich :P

Gewöhn Dir doch mal bitte an, C#-Tags anstatt von Code-Tags zu benutzen. Danke :-)

Grüße
Christian


JüTho - Fr 31.07.09 09:48

Christians Antwort kann noch klarer formuliert werden: Nein, in C# geht es so nicht. Es gibt nur die Möglichkeit, alle (!) Varianten einzeln aufzuführen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
switch (i)
{
  case  0:
  case  1:
  case  2:  // usw.
  case  9:
    //  tu etwas
    break;
  case 10:
  case 11:
  case 12:  // usw.
  case 19:
    //  tu etwas
    break;
}

Gruß Jürgen


ene - Fr 31.07.09 10:08

@Christian Bis gerade eben fiel mir das nicht mal auf:


C#-Quelltext
1:
2:
3:
4:
while (tags != "cs")
{
  Brain.Input("Du sollst cs-Tags verwenden");
}


I'll do my very best ;)

Danke für die Antworten, schade eigentlich, in anderen Sprachen kenne ich das auch. Muss ich mir halt eine Funktion für erstellen.


Christoph1972 - Fr 31.07.09 20:37

Ja, schade das es nicht geht, das wäre recht praktisch. VB.Net kanns auch nicht. Mir ist aber die Tage aufgefallen, das man mit C# nur Konstanten überprüfen kann, mit VB.Net können es auch Variablen sein. Kennt jemand den Grund warum das so ist oder sein könnte?


Kha - Fr 31.07.09 21:59

Der erste Grund ist natürlich mal wieder: Weil es in C und Java genauso ist :zwinker: .
Ich denke, dass es den Erfindern von switch einfach um eine eindeutige Zuordnung von Elementen eines Datentyps und Anweisungen ging, wie es gerade bei State Machines vorkommt und interessante Optimierungen [http://en.wikipedia.org/wiki/Switch_statement#Compilation] zulässt.
Mit variablen Cases wäre diese eindeutige Zuordnung gebrochen und es müsste erst einmal definiert werden, wass passieren soll, wenn mehrere Cases gleichzeitig erfüllt sind.


Christoph1972 - Fr 31.07.09 22:16

Ah, interessant!:les: Vielen Dank!


Kha - Fr 31.07.09 22:56

Eine etwas gepimpte Version [http://c-sharp-forum.de/viewtopic.php?t=81900] könnte ich übrigens auch noch anbieten ;) .

Und wenn du mal ein wirkliches "switch on steroids", wie man so schön sagt, erleben willst, solltest du dir unbedingt das pattern matching [http://en.wikipedia.org/wiki/Pattern_matching] von funktionalen Sprachen ansehen.


jaenicke - Sa 01.08.09 09:48

Lassen sich die Bereiche, um die es geht, denn mathematisch definieren? Im obigen Beispiel wäre switch..case ja z.B. via div evtl. möglich. Und dann wären da noch Arrays möglich.

Aber es ist eben wirklich die Frage der genauen Anwendung und wie gut optimiert werden soll.