Drucken
Kategorie: Tips & Tricks
Zugriffe: 1853

Dieses Problem ist mir bei einem Vortrag über die Lokalisierung von Programmen zum ersten mal aufgefallen. Bei einem Treffen der Dortmunder .net Usergroup (www.do-dotnet.de) berichtete Matthias Raacke von Problemen bei der Übersetzung von solchen Konstrukten. 

Etwas später stolperte ich beim Schutz des Quelltextes mit einem Obfuscator über das gleiche Problem. Nach der Obfuskierung waren die Texte in den Enum Typen nicht mehr lesbar!


Daher mein Tip: 
Niemals die Namen einer Enumeration mit Enum.GetName() auslesen und in der Benutzeroberfläche ausgeben.

 

Doch worum geht es dabei eigentlich genau?

Schaut euch mal diesen Quelltext Ausschnitt an:

using System;
using System.Windows.Forms;
namespace EnumTip 
{
  public partial class Form1 : Form 
  {
     enum Farbe { rot = 0, gelb, grün }
     public Form1() 
     {
        InitializeComponent();
        string[] FarbenListe = Enum.GetNames(typeof(Farbe));
        comboBox1.Items.AddRange(FarbenListe);
     }
  }
}

Wenn das Programm gestartet wird, sieht es in etwa so aus:

Mit der ComboBox kann man zwischen den Farben wählen. Es sieht gut aus und funktioniert auch ohne Probleme.

Nach dem Obfuskieren sieht es aber ganz anders aus! Das zweite Bild zeigt das Problem.

Die Farbnamen sind in unlesbare Zeichen konvertiert worden. Aber dennoch funktioniert das Programm problemlos! Nur der Anwender kann die Farben nicht mehr richtig auswählen.