![]() |
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Meine Idee mit dem Ord(High(TEnum)) war so gedacht:
Delphi-Quellcode:
type
TEnum = ( t1, t2, t3); var lEnum: TEnum; begin {$DEFINE ENUMCOUNT 0} case lEnum of t1: begin {$DEFINE ENUMCOUNT ENUMCOUNT+1} ... end; t2: begin {$DEFINE ENUMCOUNT ENUMCOUNT+1} ... end; // Hier immer letztes Element aus der Case-Anweisung eintragen. {$IF Ord(High(TEnum)) <> ENUMCOUNT} {$MESSAGE Error 'Case-Fall fuer jedes Element ausprogrammieren!'} {$IFEND} else raise Exception.Create('Fehlermeldung'); end; end; |
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Zitat:
|
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Zitat:
|
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Siehe auch:
![]() und Zitat:
|
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Zitat:
Zitat:
Delphi-Quellcode:
Dass man das jetzt erweitern muss, ist ja genau Sinn des Crashes.
CEnum : array[ TEnum ] of String = ( 't1', 't2', 't3' ); //Knallt schon hier, wenn es nicht übereinstimmt
Nebenbei hätte so eine noch weitere Vorteile, also zum Beispiel Textausgabe, Rückgabe beliebiger Werte, etc. Eventuell sucht Du ja sowas, etwas "Verboseres":
Delphi-Quellcode:
type
TMyEnum = (Value0, Value1, Value2); const ExpectedEnumSize = 3; // Erwartete Anzahl der Elemente in TMyEnum {$IF Ord(High(TMyEnum)) > (ExpectedEnumSize-1) } {$MESSAGE ERROR 'TMyEnum wurde erweitert!' } {$ELSEIF Ord(High(TMyEnum)) < (ExpectedEnumSize-1) } {$MESSAGE ERROR 'TMyEnum wurde verkleinert!' } {$IFEND} |
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Zitat:
|
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Er muß ja keinen Fehler werfen, aber z.B. eine Warnung oder Info wäre eigentlich problemlos möglich, wenn bei einem Enum nicht alle Werte benutzt wurden.
Ja, natürlich auch abschaltbar, bzw. vielleicht über ein Attribut oder Keyword, explizit anforderbar, denn es kommt vor, dass ich in manchen Case absichtlich garnicht alles verwende, z.B. wenn an einer Stelle nur ein Teil benötigt wird und der Rest einfach nichts machen soll. |
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Zitat:
|
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Zitat:
|
AW: Case-Anweisung - Zwingen alle Elemente des Typen auszuprogrammieren
Zitat:
Delphi-Quellcode:
case bla of
b1: HandleB1; b2: HandleB2; else // nix tun end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 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