Autor |
Beitrag |
Sneedlewoods
      
Beiträge: 20
|
Verfasst: Di 12.02.13 01:55
Hallo,
ich habe diese Deklaration verwendet:
C#-Quelltext 1:
| public const int a1=1; |
Ist es jetzt möglich über die 1 auf a1 zu schließen? Vermutlich nur mit "enum" oder?
Vielen Dank und Grüße
Sneedle
Moderiert von Th69: C#-Tags hinzugefügt
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 12.02.13 06:01
Mit Enum wirst du da gar nichts erreichen, da eine Compiler-Konstante, wie du sie definiert hast, nicht zu einem Enum gehört.
Von 1 kannst du aber auch nicht auf a1 schließen, 1 ist nur ein Wert im Speicher.
Scheinbar ist es auch nicht möglich, den Namen der Konstante zu ermitteln, außer du lässt dir alle Felder der Klasse geben, aber dann kannst du in der Array nur nach der Konstante suchen, wenn du den Namen kannst, was aber ja zur Laufzeit nicht der Fall ist. Dort kannst du natürlich direkt die Werte der Felder durchsuchen und alle Felder mit dem Wert 1 werden raus gepickt, aber das ist nicht sinnvoll, da ja auch andere Felder den Wert 1 haben könnten.
Wahrscheinlich lässt sich aber was machen, wenn du der Konstante ein Attribut mit dem Namen anhängst, aber da ich mit Attributen bisher noch keine Erfahrung hatte, weiß ich nicht sicher, ob das geht.
Für diesen Beitrag haben gedankt: Sneedlewoods
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 12.02.13 13:31
Hallo ihr beiden,
doch ein enum wäre hier besser, da man mittels der Enum.GetName-Methode von einem Wert auf den Enum-Namen abfragen kann.
Für diesen Beitrag haben gedankt: Sneedlewoods
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 12.02.13 14:15
Einen sinnvollen Weg kann man nur raten wenn man auch den Grund kennt warum du das willst. Aus der Kürze der Fragestellung bleibt, sorry, eigentlich nur Unsinn übrig. Vielleicht mal kurz ausholen und erklären warum du das brauchst.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Di 12.02.13 14:46
Ich würde auch sagen ein enum macht am meisten sinn.
Und weil ich so gerne auf MSDN verlinke: msdn.microsoft.com/d...bt4032(v=vs.80).aspx
Für diesen Beitrag haben gedankt: Sneedlewoods
|
|
Sneedlewoods 
      
Beiträge: 20
|
Verfasst: Di 12.02.13 18:35
Hallo danke erstmal für die Rückmeldungen.
Zum Hintergrund, ich möchte ein Schachprogramm schreiben. Intern arbeite ich mit einem eindimensionalen Array mit 64 Feldern. Über die Konstanten möchte ich mit den gebräuchlichen Feld-Namen wie a1 oder g5 auf das entsprechende Array-Feld zugreifen. Manchmal wird es aber auch sinnvoll sein, andersherum den Index-Wert zu nehmen und dann auf den Konstantennamen zurückzuschließen, z.B. um die berechneten Züge sinnvoll lesbar auszugeben.
Ich hatte zuerst ein enum genommen, mich stört dabei aber dass ich da immer z.B. MyEnum.a1 schreiben muss, anstatt nur a1.
a1 entspricht also immer dem array[1]
a8 - array[8]
b1 - array[9]
etc.
Das wird sich nie ändern.
Ich schreib vermutlich dann eine Methode GetName(index) mit case 1: return "a1" ...
Danke jedenfalls, ich wollte nur sichergehen, dass es da nicht doch einen verrückten Weg gibt auf den Namen zu schließen 
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 12.02.13 18:58
Ich wüßte nicht in welcher Weise die Konstante a1 im Code hilfreich wäre. Kann mir keinen Algorithmus vorstellen wo das nötig ist. Ich denke mal du mußt immer auf Usereingaben reagieren und das auf einen Index mappen? Also du hättest zum Beispiel den Text a1 aber nie die Konstante, Variable etc mit Namen a1? Oder gibt es Schachalgorithmen in dem du explizite Felder ansprechen mußt wo ein entsprechender Konstanten Name helfen würde den zu verstehen?
Wenn es tatsächlich nur um das Mapping UI Eingabe/Ausgabe zu Index im Code geht würde ich einfach ein Klasse schrieben mit zwei Dictionaries die FeldName zu Index und umgekehrt mappen. Ist sicherlich lesbarer als zwei elend lange switch ... cases.
Edit:
Zitat: | a1 entspricht also immer dem array[1] |
Nein. Es wäre array[0].
|
|
Sneedlewoods 
      
Beiträge: 20
|
Verfasst: Di 12.02.13 19:11
Hi Ralf,
zum letzten Punkt, nein es ist immer 1 - ich nehme mir die Freiheit :p
Die Namen im Code zu verwenden kann in vielerlei Hinsicht hilfreich sein. Zum Beispiel wenn ich eine neue Figur auf das Schachbrett setze. Dann will ich sagen können:
PutPawnOn(a1) und nicht PutPawnOn(array[1])
Solche Situationen wird es sehr viele geben, gerade auch auf Hinblick der Analyse-Fähigkeiten des Programmes, die sich stark am menschlichen Denken orientieren sollen.
Es könnte schon als Mapping betrachtet werden, aber auch die Lesbarkeit ist für mich als Schachspieler wichtig.
Ich brauche nur eine switch-case Prozedur, von Name zu Index geht es ja so, weil es Konstanten sind !
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 12.02.13 22:49
Th69 hat folgendes geschrieben : | Hallo ihr beiden,
doch ein enum wäre hier besser, da man mittels der Enum.GetName-Methode von einem Wert auf den Enum-Namen abfragen kann. |
Ja klar wäre ein Enum sinnvoller, aber den Namen des Konstante kann er nicht über den Konstanten-Wert erfahren ^^
So hatte ich das jetzt gedacht und auch darauf beruhend geantwortet.
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Mi 13.02.13 02:04
Statt einem Arrray kannst du ein Dictionarys<> hernehmen.
hast du eine Klasse SpielFeld, erstellst du ein Dictionary<string, Spielfigur> das die Strings wie "A1" auf ein Feld mappt.
Zusätzlich machst du dir dann noch eine Methode, die aus zahlen wie "28" einen String machen. (das ist nicht schwer, Die Zahl modulo 8 ergibt den Buchstaben und die Zahl / 8 die Zahl zum String oder andersherum)
Zuletzt bearbeitet von jfheins am Mi 13.02.13 02:08, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: Sneedlewoods
|
|
Sneedlewoods 
      
Beiträge: 20
|
Verfasst: Do 14.02.13 19:06
Mit dem Dictionary war ein Supertip, die kommen gerade massenweise zum Einsatz
Danke jfheins.
|
|