2011-10-18 12 views
7

Aşağıdaki if ifadesi bir durum ifadesine dönüştürülebilir mi?Bir değerin "if" ifadesi yerine "case" ifadesi olan bir aralıkta olduğunu nasıl test edebilirim?

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

Yanıtım:

Evet bu doğru

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

mi ki?

+4

Bunu neden istiyorsun? Bu ifadeler için, bir 'if ... o zaman 'bunu yapmanın daha açık ve hızlı bir yoludur. Burada 'case' kullanımı ile ilgisi yoktur. –

+1

Alternatif bir ifade: eğer ([5..10] içinde numara) sonra .. else .. –

+2

InRange() limitlerin sabit olmadığı veya ayarlanan aralığın dışında olduğu zamanlar için. –

cevap

25

Numara sonra bazı tamsayı veri türü, varsa:

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

thx yani uzun kodu dışarıda bırakmak zorundaydım ... ve sadece sayılara gitmek alrite şimdi çok anlamlıyım – user1000441

+4

Tabii ki bu sadece sayı tamsayı ise ve bir kayan nokta türü değilse çalışacaktır. –

+1

@ user1000441 bu cevap sorununuzu çözmüşse, bunu "kabul edilen yanıt" olarak işaretlemelisiniz, böylece başkaları sorunun çözüldüğünü biliyorlar. – HpTerm

6

küçük düzeltme:

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

+1 Bu, 'case' kullanarak kodlamanın doğru bir yoludur, ancak dürüst olmak gerekirse, burada bir 'case 'yerine' case' yerine bir 'case' kullanmanın yararı yoktur. –

+0

0_o ok cadı kodu doğru mu? – user1000441

+0

@ peter, bu kod burada doğru. Ancak Arnaud, o zaman ifadenin daha uygun olduğunu belirtir. –

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