Lokalisierbare Enums


Thomas Wölfer
Thomas Wölfer

28. September 2004


Um Objekte bzw. deren Texte lokalisierbar zu machen kommen im Fall von 'Enums' die TypeConverter ins Spiel. Die Idee dabei ist, das man einfach einen TypConverter der die Konvertierung von und nach 'string' beherrscht an beliebige Enums dranhängt - und die dann im Zuge der Konvertierung gleich die lokalisierten Strings liefern.

Nichts einfacher als das - es gibt sogar eine praktische Basisklasse dafür: Den EnumConverter. Die Dokumentation dazu macht einen aber reichlich kirre: Zwar gibt es einen extra Hinweis für Leute die davon ableiten wollen - nur gibt es dann absolut nichts zum Thema Konstruktor. Der EnumConverter hat nämlich einen privaten Defaultkonstruktor, und mindestens einen weiteren der einen Parameter bekommt. Der ist aber in der normalen Doku nicht dokumentiert.

Mit anderen Worten: Auf der anderen Seite soll man zwar erben können, auf der anderen Seite wird aber nicht verraten wie. Wer nun meint 'Kein Problem, dann erbt man eben einfach von 'TypeConverter' - der hat natürlich Recht, und genau das habe ich vor etwa zwei Jahren auch getan.

Heute bin ich aber wieder mal über den Code gestolpert und habe nachgesehen - und mittlerweile ist der Konstruktor zum EnumConverter dokumentiert und kann damit (offiziell) benutzt werden. (Die Doku sagt zwar, der Konstruktor wäre Teil der Infrasturktur die man nicht benutzen soll, aber der Hinweis für 'Erbende' widerspricht diesem Teil der Dokumentation ja eindeutig....)

Lange Rede kurzer Sinn: Geerbt von EnumConverter ist der Lokalisierbare EnumConverter extrem einfach implementiert. (Tipp: Der Parameter ist natürch der Typ des Enums, aber das hätte man auch mit Reflector herausfinden können.)