![]() |
Case-Anweisung für Strings?
Ich nutze z.z. die Anweisung Case für eine Anweisung mit ca. 40 Ausgängen. Da es wohl noch deutlich mehr werden, will ich gern auf Strings umbauen (wegen der Übersichtlichkeit und Lesbarkeit des Codes). Doch eine Anweisungsreihe á la
if ... = ... then begin end else if ... = ... then begin end else ... usw ist doch auch sehr viel getippe. Gibt es da eine Anweisung ähnlich wie Case für Strings. PS: Hat das einen Hintergrund, warum Strings unzulässig sind? |
Re: Case-Anweisung für Strings?
Nein, für Strings geht es nicht. Und der Grund ist, dass nur ordinal Typen erlaubt sind.
|
Re: Case-Anweisung für Strings?
Hi,
wie Luckie schon gesagt hat, ist das ohne weiteres nicht möglich. Allerdings kannst du dir über einen Umweg die Möglichkeit verschaffen. Wir haben in der Code-Lib auch einen entsprechenden Beitrag, allerdings nur für Delphi for Win32. Aber unter Umständen kannst du dir das ja für deine Wünsche umschreiben. [cl="Case String*"]Such[/cl] am Besten mal danach. ;) Chris ![]() |
Re: Case-Anweisung für Strings?
Welchen Sinn macht diese Einschränkung denn unter .Net? Es gibt doch kein endgültiges Kompilat mehr...
Kleines Beispiel:
Delphi-Quellcode:
Man könnte jetzt erwarten, dass hier wegen der Pflicht ordinaler Typen irgendwelche coolen Optimierungen laufen...
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; Pah! Das wird eigentlich erzeugt:
Delphi-Quellcode:
Sorry, aber wo ist hier der Grund für diese Einschränkung? IMHO hat Abwärtskompatibilität seine Grenzen... :?
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; case of ist nett um Verschachtelungen zu vermeiden und die TString-Vorschlaghammer methode ist einfach nicht akzeptierbar... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz