2011-10-18 7 views
7

La seguente istruzione if può essere convertita in un'istruzione case?Come posso verificare che un valore rientri in un intervallo con un'istruzione "case" anziché un'istruzione "if"?

if (Number >= 5) and (Number <= 10) then 
    lblAnswer.Caption := 'in range' 
else 
    lblAnswer.Caption := 'out of range'; 

La mia risposta:

Sì, può

case (number >= 5) and (Number <= 10) of 
    lblAnswer.Caption := 'in range'; 
    lblAnswer.Caption := 'out of range'; 
end; 

È corretto?

+4

Perché vuoi farlo? Per tali espressioni, un 'if ... then' è solo il modo più chiaro e veloce per farlo. Non c'è alcun interesse ad usare un "caso" qui. –

+1

Un'istruzione alternativa: if (numero in [5..10]) poi .. else .. –

+2

InRange() per quando i limiti non sono costanti o al di fuori dell'intervallo impostato. –

risposta

25

Se Numero ha qualche tipo di dati integer, quindi:

case number of 
5 .. 10: lblAnswer.Caption := 'in range'; 
else  lblAnswer.Caption := 'out of range'; 
end; 
+0

thx quindi ho dovuto lasciare fuori il codice lungo ... e basta andare a numeri alias ha senso ora thx molto – user1000441

+4

Ovviamente questo funzionerà solo se il numero è un intero e non un tipo a virgola mobile. –

+1

@ user1000441 se questa risposta ha risolto il tuo problema, dovresti contrassegnarlo come "risposta accettata" in modo che altri sappiano che il tuo problema è risolto. – HpTerm

6

Una piccola correzione:

case (number >= 5) and (Number <= 10) of 
    true:lblAnswer.Caption := 'in range'; 
    false:lblAnswer.Caption := 'out of range'; 
end; 
+3

+1 Questo è il modo corretto di codificarlo usando 'case', ma onestamente non vi è alcun interesse nell'usare un' caso' qui invece di un'istruzione 'if .. then'. –

+0

0_o ok il codice stregone è corretto? – user1000441

+0

@peter, questo codice è corretto. Ma Arnaud significa che un'istruzione se poi è più appropriata. –

-1
Function InRange (Lo,Hi,Val : Integer) : Boolean; 
Begin 
Result := (Val>=Lo)And(Val<=Hi); 
End; 
Problemi correlati