Entwickler-Ecke

Basistechnologien - Zahlen-Werte-Zuordnung: geht das einfacher?


Mosima - Sa 10.11.12 19:29
Titel: Zahlen-Werte-Zuordnung: geht das einfacher?
Hallo zusammen, ich bin ziemlich unerfahren in sache c# daher kanns sein das das folgende problem bei manchen kopfschüteln verursacht :)

ich hab eine combobox erstellt in der er eine zahl von 1-10 auswählen kann.
jede zahl hat im code einen anderen wert. (z.b 1 = 29, 2 =32)

jetzt meine frage. wie kann ich mir das leben einfacher machen?

mein erster gedanke war, dass ich hunderte if abfragen mache und so immer der variable den schlussendlichen wert zu geben. aber das erscheint mir doch etwas unpraktisch und da dachte ich das c# sicher eine einfachere methode besitzt.

kann mir jemand helfen?^^

vielen dank

Mosima


Ps. sry für den verwirrenden text, aber ich hab keine ahnung wie ichs sonst beschreiben soll :D

Moderiert von user profile iconTh69: Titel geändert.


Ralf Jansen - Sa 10.11.12 19:53


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
private void Form1_Load(object sender, EventArgs e)
{
   var data = new[]  { new { id = 1, value = 29 }, new { id = 2, value = 32 } };

   comboBox1.ValueMember = "value";
   comboBox1.DisplayMember = "id";
   comboBox1.DataSource = data;
}

private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
    if (comboBox1.SelectedValue != null)
    {
        int value = (int)comboBox1.SelectedValue;
    }
}


Das ist Quick&Dirty. Wenn die in deiner Combobox Wertpaare hast haben die auch sicher irgendeinen Sinn und sind nicht nur zufällig Paare. Du solltest dann eine entsprechende Klasse schreiben die dies Paare verwaltet und keinen anonymen Typ verwenden wie ich hier.

Edit: unnötig kompliziertes Beispiel vereinfacht


Mosima - So 11.11.12 01:50

hey super genau sowas suchte ich :D

da hast du mir gleich noch was neues beigebracht :juhui:
Vielen Dank


Mosima - So 11.11.12 03:40

hey ich hab jetzt ein für mich nicht nachfolziehendes problem :(

es kommt immer die fehlermeldung "Es wurde kein optimaler Typ für das implizit typisierte Array gefunden.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
 var lvl_kaserne = new[] 
                { 
                    new {id = 1, value = 1},
                    new {id = 2, value = 0.59},
                    new {id = 3, value = 0.56},
                    new {id = 4, value = 0.53},
                    new {id = 5, value = 0.50},
                    new {id = 6, value = 0.47},
                    new {id = 7, value = 0.44},
                    new {id = 8, value = 0.42},
                    new {id = 9, value = 0.39},
                    new {id = 10, value = 0.37},
                    new {id = 11, value = 0.35},
                    new {id = 12, value = 0.33},
                    new {id = 13, value = 0.31},
                    new {id = 14, value = 0.29},
                    new {id = 15, value = 0.28},
                    new {id = 16, value = 0.26},
                    new {id = 17, value = 0.25},
                    new {id = 18, value = 0.23},
                    new {id = 19, value = 0.22},
                    new {id = 20, value = 0.21},
                    new {id = 21, value = 0.20},
                    new {id = 22, value = 0.19},
                    new {id = 23, value = 0.17},
                    new {id = 24, value = 0.16},
                    new {id = 25, value = 0.16}
                };
                stufe_kaserne.ValueMember = "value";
                stufe_kaserne.DisplayMember = "id";
                stufe_kaserne.DataSource = lvl_kaserne;
                var kaserne = Convert.ToDecimal(stufe_kaserne.SelectedValue);


Th69 - So 11.11.12 10:05

Hallo Mosima,

der Ausdruck value = 1 stellt für den Compiler eine Ganzzahl (int) dar, während alle anderen Werte double sind.
Daher schreibe hier explizit value = 1.0 hin, damit alle value-Werte denselben Datentyp erhalten.

P.S. Ich habe mal den Titel dieses Beitrags etwas sinnvoller gestaltet ;-)


Mosima - So 11.11.12 12:24

ok danke dir :)

man ich muss noch viel lernen :(


Th69 - So 11.11.12 13:19

Aller Anfang ist schwer.
Wichtig ist aber, daß du Fehlermeldungen als Herausforderung ansiehst, um daraus zu lernen.

Bei jeder Fehlermeldung im VS kannst du mittels F1 zu der MSDN-Hilfe gelangen. Ansonsten einfach "MSDN CS...." in die Internet-Suchmaschine eingeben und du gelangst zu der Fehlerbeschreibung. In deinem Fall oben zu Compilerfehler CS0826 [http://msdn.microsoft.com/de-de/library/vstudio/bb384226.aspx].


Ralf Jansen - So 11.11.12 13:33

Ich glaube du schlägst dich gerade mit einem Problem rum das du nicht haben solltest. Da muss ich mir auch an die eigene Nase fassen. Der von mir verwende anonyme Typ war nur der Einfachheit des Beispiels geschuldet. Ich wollte dafür keine richtige Klasse schreiben. Schon gar keine der ich keinen Namen geben kann weil ich nicht weiß worum es geht. Das gezeigte mit dem anonymen Typ ist eine Methode die du so nicht verwenden solltest. Was ich zeigen wollte was das man eine Liste von Objekten an ein Control binden kann und dabei entscheidet welcher Wert aus diesem Objekt wird angezeigt und welcher Wert wird bei einer Auswahl herausgegeben.

Aber das Objekt das du in der Combobox verwenden sollte und vermutlich am besten auch gleich durchgehend in der ganzen Anwendung sollte eine richtige Klasse sein und nicht anonym. Jetzt wo du ein wenig Code gezeigt hast kann man vielleicht auch erraten was diese zu erstellende Klasse den für ein Ding sein soll. Scheinbar eine Kaserne oder eine Kasernenstufe.


Mosima - So 11.11.12 17:58

ach das wird kein spiel oder so :D an sowas trau ich mich noch net.

ist mehr so ein taschenrechner für ein browsergame :D mehr ne spielerrei zum lernen ;)

und das mit klassen peil ich ja erst recht net. da muss ich mich noch oft ransetzten und durchlesen :)