Felder einer Klasse über dynamischen String abfragen

10/06/2008 - 22:46 von Michael Stum | Report spam
Hallo,

ich habe ein Struct das ungefàhr so aussieht:

public struct Log
{
public string Event1Name;
public string Event2Name;
public string Event3Name;
public string Event4Name;
public int CurrentEvent;
}


CurrentEvent wird extern gesetzt, ich will aber dann auch EventXName
setzen. Momentan habe ich dafür einen Code der zwar funktioniert, aber
hàsslich ist:

switch(MyLog.CurrentEvent){
case 1:
Event1Name = CurEvName;
break;
case 2:
Event2Name = CurEvName;
break;
case 3:
Event3Name = CurEvName;
break;
case 4:
Event4Name = CurEvName;
break;
default:
Panic();
break;
}

Jetzt kann man natürlich diskutieren, warum ich EventXName habe und
vorschlagen, doch eine List<String> EventNames zu machen, weil ich da ja
per MyLog.EventNames[MyLog.CurrentEvent] drankàme. Das mag korrekt sein,
aber das Struct ist gekürzt und ist aus kompatibilitàtsgründen so wie es
ist.

Ich frage mich: Da ich einfach per
string.Format("Event{0}Name",MyLog.CurrentEvent); den Feldnamen bauen
kann, kann ich irgendwie das entsprechende EventXName-Feld damit ansprechen?
Sollte ja per Reflection gehen, aber da ich noch nicht mit Reflection
gearbeitet habe stehe ich gerade vor einer Wand und bin nicht sicher, wo
ich zu suchen anfangen soll.

Danke für Hinweise!


http://www.Stum.de · http://www.Souvenance.net

e-Mail Adresse ist gültig, wird aber àußerst selten gelesen.
e-Mail address is valid, but read very infrequently.
 

Lesen sie die antworten

#1 Frank Dzaebel
10/06/2008 - 23:18 | Warnen spam
Hallo Michael,

Ich frage mich: Da ich einfach per
string.Format("Event{0}Name",MyLog.CurrentEvent); den Feldnamen bauen
kann, kann ich irgendwie das entsprechende EventXName-Feld damit
ansprechen?



Log myLog = new Log(); myLog.CurrentEvent = 2;
string name = string.Format("Event{0}Name", myLog.CurrentEvent);
string curEvName = "Name1";
if (myLog.CurrentEvent > 0 && myLog.CurrentEvent <= 4)
{
FieldInfo fi = myLog.GetType().GetField(name);
object obj = myLog;
fi.SetValue(obj, curEvName); myLog = (Log)obj;
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen