Welchen Sinn macht diese Einschränkung denn unter .Net? Es gibt doch kein endgültiges Kompilat mehr...
Kleines Beispiel:
Delphi-Quellcode:
type
Cases = (First, Second, Third);
SomeClass = class
public
procedure DoSomething(someValue : Cases);
end;
implementation
procedure SomeClass.DoSomething(someValue : Cases);
var
Dings :string;
begin
case someValue of
Cases.First : Dings := 'A';
Cases.Second : Dings := 'B';
Cases.Third : Dings := 'C';
end;
Console.WriteLine(Dings);
end;
Man könnte jetzt erwarten, dass hier wegen der Pflicht ordinaler Typen irgendwelche coolen Optimierungen laufen...
Pah! Das wird eigentlich erzeugt:
Delphi-Quellcode:
procedure SomeClass.DoSomething(someValue: Cases);
var
text1: string;
begin
if (someValue <> Cases.First) then
if (someValue = Cases.Second) then
text1 := 'B'
else if (someValue = Cases.Third) then
text1 := 'C'
else
text1 := 'A';
Console.WriteLine(text1)
end;
Sorry, aber wo ist hier der Grund für diese Einschränkung?
IMHO hat Abwärtskompatibilität seine Grenzen...
case of ist nett um Verschachtelungen zu vermeiden und die TString-Vorschlaghammer methode ist einfach nicht akzeptierbar...