In Javascript kann man neben der herkömlichen Methode myobject.FirstName auf die Properties eines Objektes auch mittels myobject["FirstName"] zugreifen. “Firstname” kann dabei auch eine Variable sein, was z.B. bei einer localisierten Ausgabe sehr praktisch ist.
var myPropertyName = “Firstname”;
myobject[myPropertyName];
VB kennt ebenfalls eine solche Möglichkeit: myobject.(“FirstName”), bzw. auf das obige Beispiel angewendet: myobject.(myPropertyName).
In C# beißt man sich dagegen allerdings die Zähne aus, versucht man dort dynamisch auf die Properties eines Objektes zuzugreifen, fällt der Debugger auf die Nase. Mit einem kleinen Trick mittels IObjectHelper Members geht´s allerdings doch:
public class myObject
{
private string Firstname;
private string property_de;
private string property_en;
public string Property;
{
get { return this.firstname; }
set { this.firstname = value; }
}
public string Property_de;
{
get { return this.property_de; }
set { this.property_de = value; }
}
public string Property_en;
{
get { return this.property_en; }
set { this.property_en = value; }
}
#region IObjectHelper Members
public object this[string memberName]
{
get {
switch (memberName) {
case “firstname”: return this.firstname;
case “property_de”: return this.property_de;
case “property_en”: return this.property_en;
default: throw new Exception(“Invalid Member”);
}
}
set {
switch (memberName) {
case “firstname”: this.firstname = (string) value; break;
case “property_de”: this.property_de = (string) value; break;
case “property_en”: this.property_en = (string) value; break;
default: throw new Exception(“Invalid Member”);
}
}
}
Nun kann man auch in C# einfach via myObject["firstname"] zugreifen. Ok, vielleicht noch nichts besonderes, interessant wird es, wenn man z.B. auf ein sprachabhängiges Property zugreifen möchte:
string lang = “de”;
myObject["property_"+lang];
Probiert und gestestet ist das Ganze übrigends unter .Net 1.1. Ob die neue Version 8.0 von C# in .Net 2.0 eine Möglichkeit mitbringt, dynamisch auf Properties zuzugreifen, kann ich IMO nicht sagen.