Ik heb inderdaad de naam van de variabele nodig, en niet van het type.
Het type is namenlijk in alle gevallen Hashtable.
Het gaat hier om een static fixed class, die vol zit met tabellen. Die tabellen hebben een naam die staat voor wat er in die tabellen zit, maar ik dacht dus de naam van de variabele terug te kunnen krijgen en dan wist ik genoeg, helaas, die var-namen zijn weg na compilen (wat logisch is als ik even wat verder had doorgedacht, er kunnen meerdere refs zijn)
Vandaar het toevoegen van het tagje ;-)
Hier een stukje code uit me werkelijke app, misschien dat dan duidelijk is waarom ik dit nodig had:
code:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
| public class NamedHashtable : Hashtable
{
private string c_name = "";
public String Name
{
get
{
return c_name;
}
}
public NamedHashtable(string TableName)
: base()
{
c_name = TableName;
}
}
public static class CameraSettings
{
public static NamedHashtable MeteringMode = new NamedHashtable("MeteringMode");
public static NamedHashtable ExposureComp = new NamedHashtable("ExposureComp");
//... en zo nog 25 tabellen...
public static Hashtable PropList = new Hashtable();
static CameraSettings()
{
tableInit();
}
private static void tableInit()
{
MeteringMode.Add((int)1, "Spot Metering");
MeteringMode.Add((int)3, "Evaluative Metering");
MeteringMode.Add((int)4, "Partial Metering");
MeteringMode.Add((int)5, "Center-Weighted Average Metering");
MeteringMode.Add(0xFFFFFFFF, "unkown");
ExposureComp.Add((int)0x18, "+3");
ExposureComp.Add((int)0x15, "+2 2/3");
ExposureComp.Add((int)0x14, "+2 1/2");
ExposureComp.Add((int)0x13, "+2 1/3");
ExposureComp.Add((int)0x10, "+2");
ExposureComp.Add((int)0xD, "+1 2/3");
ExposureComp.Add((int)0xC, "+1 1/2");
ExposureComp.Add((int)0xB, "+1 1/3");
ExposureComp.Add((int)0x8, "+1");
ExposureComp.Add((int)0x5, "+2/3");
ExposureComp.Add((int)0x4, "+1/2");
ExposureComp.Add((int)0x3, "+1/3");
ExposureComp.Add((int)0x0, "0");
ExposureComp.Add((int)0xFD, "-1/3");
ExposureComp.Add((int)0xFC, "-1/2");
ExposureComp.Add((int)0xFB, "-2/3");
ExposureComp.Add((int)0xF8, "-1");
ExposureComp.Add((int)0xF5, "-1 1/3");
ExposureComp.Add((int)0xF4, "-1 1/2");
ExposureComp.Add((int)0xF3, "-1 2/3");
ExposureComp.Add((int)0xF0, "-2");
ExposureComp.Add((int)0xED, "-2 1/3");
ExposureComp.Add((int)0xEC, "-2 1/2");
ExposureComp.Add((int)0xEB, "-2 2/3");
ExposureComp.Add((int)0xE8, "-3");
ExposureComp.Add(0xFFFFFFFF, "unkown");
// ... en zo nog 25 tabellen...
PropList.Add((int)EDSDK.PropID_MeteringMode, MeteringMode);
PropList.Add((int)EDSDK.PropID_ExposureCompensation, ExposureComp);
}
} |
Ergens anders in een eventhandler, waar ik alelen beschik over een integer die het type property aanwijst...
code:
1
2
3
| ...
String changedPropertyName =((NamedHashtable)CameraSettings.PropList[(int)InPropertyID]).Name;
... |
Mocht iemand nu nog steeds zeggen, dat had ik effe wat handiger aangepakt, dan hoor ik dat graag, er valt nog een hoop te leren !
P.S. @MrDelete: private constructor werkte niet, want dan is deze onbereikbaar.