【问题标题】:How can I test that a value is within a range with a "case" statement instead of an "if" statement?如何使用“case”语句而不是“if”语句来测试值是否在范围内?
【发布时间】:2011-12-09 19:31:00
【问题描述】:

下面的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;

这是正确的吗?

【问题讨论】:

  • 你为什么要这样做?对于这样的表达式,if ... then 只是更清晰、更快捷的方式。没有兴趣在这里使用case
  • 另一种说法:if (number in [5..10]) then .. else ..
  • InRange() 用于限制不是恒定或超出设定范围的情况。

标签: delphi syntax if-statement case-statement


【解决方案1】:

如果 Number 具有某种整数数据类型,则:

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

【讨论】:

  • 谢谢,所以我不得不省略长代码......现在只去数字 alrite 有意义,谢谢
  • 当然,这只有在 number 是 Integer 而不是浮点类型时才有效。
  • @user1000441 如果此答案解决了您的问题,您应该将其标记为“已接受的答案”,以便其他人知道您的问题已解决。
【解决方案2】:

一个小的修正:

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

【讨论】:

  • +1 这是使用case 对其进行编码的正确方法,但老实说,这里没有兴趣使用case 而不是if .. then 语句。
  • @peter,这里的代码是正确的。但 Arnaud 的意思是 if then 语句更合适。
  • da-soft 的答案或 if 语句。用布尔条件写 case 很奇怪。我原本以为这是语法错误,看起来很奇怪。这个答案有效,但你永远不会在其他人的代码中看到它。
  • -1。我不能支持布尔案例陈述。它们会迷惑编译器,进而迷惑程序员。 (有关此主题的长时间讨论,请发送newsgroup search for Boolean case statements,并在搜索词中包含我的名字。)
【解决方案3】:
Function InRange (Lo,Hi,Val : Integer) : Boolean;
Begin
 Result := (Val>=Lo)And(Val<=Hi);
End;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 2013-10-02
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多