Hallo,
wie kann ich folgendes Abbilden.
"Hallo", "Hi" = 0;
"Bis bald", "Tschüss" = 1;
Dafür muss ich doch zwei enum machen oder??
enum test {
Hallo = 0;
Bis bald = 1;
}
enum test1 {
Hi = 0;
Tschüss = 1;
}
Wie kann ich mehrere Bedeutungen auf auf eine Zahl legen?
Danke!
Pedro
NACHTRAG:
test a;
test1 b;
a = test.Hallo;
b = a; // Error
Wiso geht das nicht ? Ich dachte ein enum ist intern ein int oder eine anderer Zahlentype. Ich hätte gedacht b ist jetzt 1 und damit Hi.
Danke für die Hilfe
Dazu müsstest du den Enum so umschreiben:
enum test: uint {
Hallo = 0;
Bis bald = 1;
}
enum test1: uint {
Hi = 0;
Tschüss = 1;
}
Und dann halt
b = (uint) a;
Die Enums verhalten sich ähnlich wie Klassen.
Person p = new Person();
Haus h = new Haus();
p = h;
Wird dir ebenfalls eine Exception werfen.
Du kannst einem Enum zwar einen Wert zuweisen, aber nicht ein anderes Enum.
Danke!
Wie bekomme ich wenn ich Hallo habe die 0;
Geht das mit enum?
Pedro
test a = test.Hallo;
int i = a as int;
Console.WriteLine("{0}", i);
habe ich nicht getestet, sollte aber funktionieren.
Nein ich habe den String "Hallo" und nicht test.Hallo.
Ich glaube enum ist vielleicht für meine Zwecke in diesem Fall vielleicht doch nicht das richtige.
Hallo Pedro_15
zur Eingangsfrage. Klar kann man in einem Enum mehreren Komponenten den gleichen Wert zuweisen:
enum test {
Hallo = 0;
Hi = 0;
Bis bald = 1;
Tschüss = 1;
}
herbivore
Hallo zusammen!
Auch wenn man innerhalb eines Enum mehrere Bedeutungen einem Wert zuweisen kann, würde ich das nicht machen, da dann ein reversives Holen der Daten zu komischen Effekten kommen kann:
#region TestEnum
public class TestEnum
{
public enum DoppelWerte
{
Hallo = 0,
Test = 0,
DuBist = 1,
MeinFreund = 1
}
public TestEnum()
{
DoppelWerte test = DoppelWerte.MeinFreund;
Console.WriteLine(test);
test = (DoppelWerte) 1;
Console.WriteLine(test);
Console.WriteLine("Enter-Taste drücken!");
Console.ReadLine();
}
#region Main Entry Point
[STAThread]
public static void Main()
{
TestEnum myApp = new TestEnum();
}
#endregion
}
#endregion
Dieses Konsolenprogramm zeigt was ich meine, denn es liefert hier:
*************************
DuBist
DuBist
Enter-Taste drücken!
*************************
Schon etwas komisch, zwar zwingend logisch begründbar, aber sicherlich nicht erwünscht, oder?
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo norman_timo,
tja, kommt immer drauf an, was man will. Zumal man mit
foreach (String strName in Enum.GetNames (typeof (DoppelWerte))) {
Console.WriteLine (strName);
}
immer noch an alle Bezeichnungen kommt.
herbivore
Guten Abend.
Irgendwie erscheint mir das ursprüngliche Problem mit enums nicht adäquat gelöst. Es scheint sich ja um eine Zuorndung von Strings zu Ganzzahlen zu handeln, daher würde ich eine Hashtable bzw. ab .NET 2.0 die generische Klasse Dictionary<string,int> verwenden.
Aber vielleicht sind auch ja die sog. Flags gewünscht hierzu ein Beispiel:
static void Main(string[] args)
{
Test s = Test.WertA;
Console.WriteLine(s); // Ergibt: WertA
s = Test.WertC | Test.WertF;
Console.WriteLine(s); // Ergibt: WertC, WertF
s = Test.SonderWert1;
Console.WriteLine(s); // Ergibt: SonderWert1
Console.ReadLine();
}
[Flags]
enum Test
{
WertA = 0x1,
WertB = 0x2,
WertC = 0x4,
WertD = 0x8,
WertE = 0x10,
WertF = 0x20,
WertG = 0x40,
WertH = 0x80,
SonderWert1 = WertA | WertH,
SonderWert2 = WertA | WertC | WertB
}
Das nächste mal vielleicht einfach etwas genauer schildern was erreicht werden soll.
-Martin Ehrlich
Martin Ehrlich
Also zum Ursprung zurück.
Ich habe drei verschiedene Stellen woher ich werte bekomme.
Die wie das Leben so spielt natürlich alle anders geschrieben sind.
Mit diesen Werte muss ich durcheinander arbeiten und die Werte stehen fest und werden im Code abgefragt (z.B. if (variable ==A) usw. )
Beispiel
Quelle
A
B
C
Quelle
AA
BB
CC
Quelle
AAA
BBB
CCC
Zusammenfassung
A == AA == AAA
usw.
So jetzt habe ich drei enum mit den Werten angelegt
Enum Quelle1
A,
B,
C
Enum Quelle2
AA = Quelle1.A,
BB = Quelle1.B,
CC = Quelle1.C
usw.
Im gesamten Programm arbeite ich jetzt mit den int Werten und habe kein Problem mehr mit den Unterschidlichen Quellen.
Es funktioniert, aber ob das so richtig umgesetzt ist, kann ich mir eigentlich nicht vorstellen.
Pedro
Hallo Pedro_15,
klingt doch nicht schlecht, vorausgesetzt du meinst: Im gesamten Programm arbeite ich jetzt mit den enum Werten.
herbivore
Genau zu sein mit den enum int Werten.
da ja (int)Quelle1.A == (int)Quelle2.AA == (int)Quelle3.AAA
Ich weiss nicht ob, ob das gestimmt hätte.
Quelle1.A == Quelle2.AA == Quelle3.AAA
Pedro
Klar kann man in einem Enum mehreren Komponenten den gleichen Wert zuweisen
Geht das auch anderes herum: also einer Komponenten mehrere Werte zuweisen?
Und wer soll dann entscheiden, wann welcher Wert zu verwenden ist?
Kurz gesagt: Nein.
Hallo BillTuer,
weiß ja nicht, was du genau willst, aber man kann natürlich Enums als Flags verwenden. Wie das geht, haben wir schon in einem anderen Thread besprochen.
herbivore
Ich habe verschiedene Gruppen in einer DB, jede mit einer eindeutigen ID. Nun gehören verschiedene Gruppen wiederum zueinander, man kann sie also zu Übergruppen zusammenfassen. Dies kann/soll allerdings nicht in der DB abgelegt werden.
Ich will nun in meinem Programm eine Möglichkeit einbauen, mit der ich sagen kann: hole mir alle Daten einer Übergruppe. Die Übergruppen habe ich in einem Enum. Nun suche ich eine Möglichkeit, den einzelnen Übergruppen im Übergruppen-Enum die IDs der Gruppen zuzuweisen.
Hallo BillTuer,
verwende ein konstantes jagged Array. Verwende die Übergruppen als Index in das Haupt-Array. Die Unter-Arrays enthalten dann die zugehörigen Gruppen.
Im Zweifel siehe http://www.galileocomputing.de/openbook/visual_csharp/
herbivore