Forum: PC-Programmierung C# switch case Anweisung mit VS 2005


von Marcus Schlinn (Gast)


Lesenswert?

Hallo!

Ich habe ein Problem, keine Ahnung wo mein Denkfehler bei der switch 
case Anweisung ist. Wenn ich für meine switch case Anweisung die 
einzelnen unterschiedlichen Fälle mit Werten definiere möchte bekomme 
ich jedemal ne Fehlermeldung, das mit der Konstante etwas nicht in 
Ordnung ist.

case 0:
case 1:


Wenn ich jetzt für 0 und 1 eine Konstante definieren möchte, ging das in 
C Sparche ohne Probleme. Mit C# oder VS 2005 habe ich Probleme.

Wieso kann ich nicht einfach

byte TTA = 0;
byte TTB = 1;

switch(..)
{ case TTA: break;
  case TTB: break;
}

in einem Program schreiben..? Selbst mit

byte[] TTA = new byte[] { 0x00 }; ist der Compiler am meckern..!!

Please Help!

von Jo S. (tigermatze)


Lesenswert?

Hi,

hast du auch die Klasse System eingebunden? Weil in c# der Datentyp byte 
von der Klasse System abgelitten wird (using System;).

mfg

von Christian R. (supachris)


Lesenswert?

Hmm..klar dass der Compiler meckert. Eine Variable als Vergleich wird 
nicht klappen. Man kann eine Variable auf verschiedene konstante 
Audrücke testen.
Ich schätze mal, du wolltest eher sowas in der Art?
1
#define TTA 0
2
#define TTB 1
3
4
switch(..)
5
{ 
6
case TTA: break;
7
case TTB: break;
8
}

von Arc N. (arc)


Lesenswert?

> Wenn ich jetzt für 0 und 1 eine Konstante definieren möchte, ging das in
> C Sparche ohne Probleme. Mit C# oder VS 2005 habe ich Probleme.

Einfach eine Konstante und keine Variable definieren...
1
const byte TTA = 1;
2
// oder
3
enum EnumName : byte {
4
    TTA = 1, TTB = 2
5
};
6
// wenn es Flags sind (z.B. TTA = 8, TTB = 16, TTC = 32), dann 
7
[FlagsAttribute] 
8
enum FlagsName : byte {
9
    TTA = 8, TTB = 16, TTC = 32
10
};

von Marcus Schlinn (Gast)


Lesenswert?

Hallo !

Wie kann ich denn die Enumeration öffentlich für andere Methoden nutzen.
Mit public meckert mein Compiler wiederum rum, da ich das TTA und TTB in 
einer anderen Methode nutze und ihr diese nicht kennt.

The name 'TTA' does not exist in the current context

enum EnumName : byte
{ TTA = 1, TTB = 2 };

Was tun, ich dachte mit public enum EnumName : byte {...} wäre dies in 
Ordnung..?

von Arc N. (arc)


Lesenswert?

Der Name der enum muss immer mitangegeben werden (ala EnumName.TTA).
Will man in anderen Klassen nicht ClassName.EnumName.TTA schreiben,
muss die Definition aus der Klasse raus.

p.s. die Angabe byte beim enum sagt nur etwas über die "maximale Anzahl" 
der Werte, aber nichts über deren Typ. D.h. bei switch/case muss man 
trotzdem casten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.