2011-10-18 18 views
7

Czy następująca instrukcja if może zostać przekonwertowana na instrukcję case?Jak mogę przetestować, czy wartość jest w zakresie z instrukcją "case", a nie "if"?

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

Moja odpowiedź:

Tak może

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

Czy jest to prawidłowe?

+4

Dlaczego chcesz to zrobić? W przypadku takich wyrażeń, "jeśli ... to" jest po prostu wyraźniejszym i szybszym sposobem robienia tego. Nie ma tu miejsca na użycie "przypadku". –

+1

Alternatywna instrukcja: if (liczba w [5..10]) then .. else .. –

+2

InRange(), gdy limity nie są stałe lub poza ustalonym zakresem. –

Odpowiedz

25

czy numer ma jakiś typ danych Integer, a następnie:

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

thx więc musiałem pominąć długi kod ... i po prostu przejdź do liczb alrite ma sens teraz za dużo – user1000441

+4

Oczywiście to zadziała tylko wtedy, gdy liczba jest liczbą całkowitą, a nie zmiennoprzecinkową. –

+1

@ user1000441, jeśli ta odpowiedź rozwiązała problem, należy oznaczyć go jako "zaakceptowaną odpowiedź", aby inni wiedzieli, że problem został rozwiązany. – HpTerm

6

Mała korekta:

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

+1 To jest poprawny sposób kodowania go za pomocą 'case', ale szczerze nie ma interesu używania' case' tutaj zamiast instrukcji 'if .. then'. –

+0

0_o ok kod czarownicy jest poprawny? – user1000441

+0

@peter, ten kod jest prawidłowy. Ale Arnaud oznacza, że ​​zdanie "wtedy" jest bardziej odpowiednie. –

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