Es gibt eine Reihe von Vorschlägen, wie man in Delphi case mit Strings verwenden kann. Hier ein Vorschlag von mir:
Ich verwende eine Funktion StrCase mit einem Übergabeparamter vom Typ open string array. Die Funktion testet einen ebenfalls übergebenen String (den Selektor) gegen jeden Wert in der Liste und gibt die gefundene Position (0 bis Anzahl - 1) als Funktionswert zurück. Falls die Funktion keine Übereinstimmung findet, ist das Ergebnis -1.
function StrCase(Selector: string; StrList: array of string): Integer; var I: Integer; begin Result := -1; for I := 0 to High(StrList) do begin if Selector = StrList[I] then begin Result := I; break; end; end; end;
Jetzt kann man die Funktion StrCase anstelle des case-Selektors verwenden und erhält somit eine einfache Konstruktion:
procedure TestString(StringToTest: string); begin case StrCase(StringToTest, ['Eins', 'Zwei', 'Drei']) of 0: ShowMessage('1: ' + s); 1: ShowMessage('2: ' + s); 2: ShowMessage('3: ' + s); else ShowMessage('else: ' + s); end; end;
Das ist bereits alles. Der Vorteil dieser Funktion besteht darin, dass für alle ”String-Case”-Anwendungen eine Funktion zur Verfügung steht, die keine zusätzliche Typkonvertierung oder andere Gemeinheiten erfordert.