如何使用“case”语句而不是“if”语句测试一个值是否在范围内?

8
以下if语句能否转换为case语句?
if (Number >= 5) and (Number <= 10) then
  lblAnswer.Caption := 'in range'
else
  lblAnswer.Caption := 'out of range';

我的回答:

是的,它可以。

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

这个正确吗?


4
为什么你想这样做?对于这些表达式,使用“if ... then”只是更清晰、更快速的方式。在这里使用“case”没有任何意义。 - Arnaud Bouchez
1
一种替代语句:如果(数字在[5..10]中),则...否则... - LU RD
2
InRange() 用于当限制不是常量或超出集合范围时。 - David Heffernan
3个回答

27
如果Number具有整数数据类型,则:
case number of
5 .. 10: lblAnswer.Caption := 'in range';
else     lblAnswer.Caption := 'out of range';
end;

谢谢,所以我不得不省略掉长代码...直接转到数字,现在明白了,非常感谢。 - user1000441
4
如果number是整数而不是浮点数类型,这当然只会起作用。 - Uwe Raabe
1
如果这个答案解决了你的问题,你应该将其标记为“接受的答案”,这样其他人就知道你的问题已经解决了。 - HpTerm

8

一个小修正:

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

3
这是使用case编码的正确方式,但老实说,在这里使用case而不是if .. then语句没有任何意义。 - Arnaud Bouchez
@peter,这段代码是正确的。但是Arnaud的意思是if then语句更加合适。 - LU RD
1
要么使用da-soft的答案,要么使用if语句。使用布尔条件编写case语句非常奇怪。我最初以为这是语法错误,因为它看起来非常奇怪。这个答案可以工作,但你永远不会在别人的代码中看到它。 - David Heffernan
2
我不能支持布尔类型的case语句。它们会让编译器困惑,从而让程序员感到困惑。(关于这个话题的详细讨论,请在newsgroup search for Boolean case statements中搜索,并在搜索条件中包含我的名字。) - Rob Kennedy

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接