2010-11-26 3 views
3

Wie kann ich feststellen, ob der Wert einer Variablen im Bereich einer Typdeklaration liegt? Bsp.Delphi Check Variablenwert in Typ Deklaration

Type 
    TManagerType = (mtBMGR, mtAMGR, mtHOOT); 

... 

var 
    ManagerType: TManagerType; 

.... 


procedure DoSomething; 
begin 
    if (ManagerType in TManagerType) then 
    DoSomething 
    else 
    DisplayErrorMessage; 
end; 

Danke, Pieter.

+0

mtPHB fehlt ... :) –

Antwort

5
InRange: Boolean; 
ManagerType: TManagerType; 
... 
InRange := ManagerType in [Low(TManagerType)..High(TManagerType)]; 

Wie Nickolay O. bemerkt - während boolean Ausdruck oben direkt entspricht:

(Low(TManagerType) <= ManagerType) and (ManagerType <= High(TManagerType)) 

Compiler nicht führen Sie die Optimierung bei der Überprüfung der Mitgliedschaft gegen sofortiges Set basierend auf einzelnen Teilbereich. So wird [reif] optimierter Code weniger elegant sein.

+0

das kein schnellste Ansatz ist, da es den Bau von Satz erfordert, und im Inneren prüfen. –

-1

sollten Sie überprüfen, dies über: wenn mtype> Hoch (TManagerType) then ...

3

Nun, eine Variable vom Typ TManagerType muss in diesem Bereich sein, da Pascal-Typen so funktionieren. Der einzige Weg, der es nicht sein könnte, ist, wenn Sie etwas Unartiges hinter dem Rücken des Compilers getan haben.

Eine weitere Möglichkeit, zu schreiben sein würde:

InRange(ord(ManagerType), ord(low(ManagerType)), ord(high(ManagerType))) 
+0

Sie haben Recht, aber ich dachte, jemand könnte etwas wie "ManagerType: = TManagerType (10)" versuchen. –

+4

Sie müssen das nicht tun! Wenn Sie sich darüber Gedanken machen, dann werden Sie feststellen, dass Ihre Codebasis zu 90% validiert ist! Sie müssen Vertrauensgrenzen definieren (z. B. Deserialisierung, Benutzereingabe) und die Daten an den Grenzen validieren. Danach wird diese Überprüfung kontraproduktiv. Ich nenne es paranoide Programmierung! –

+0

+1 @David Ich habe schlimmere Beispiele für diese Art von Nachdenken gefunden, lange nachdem der ursprüngliche Entwickler gegangen war. Überprüfen Sie den Wert einer Variablen sofort nach dem Setzen. Methoden zweimal aufrufen, um sicherzustellen, dass sie "genommen" haben. Zu der Zeit, als ich es als "übermäßig defensiv" kategorisierte, denke ich, dass paranoide Programmierung besser klingt. –

Verwandte Themen