我有一个case语句,用于计算结果代码的整数(函数结果),如下所示:
R:= DoSomething;
case R of
0: begin
//Success
end;
1..99: begin
//Specific result messages
end;
100..199: begin
//Other specific result messages
end;
-MAXINT..-1: begin
//Failure
end;
end;
如果失败,则返回表示错误代码的负数。 DoSomething
只是返回整数作为响应代码(或错误代码,为负数)的任何函数。如果是错误,它将被传递给另一个错误处理程序。如果它成功,它将被传递给成功处理程序(继续等)。正值将由各种特定处理程序处理。
我想知道是否还有另一种写-MAXINT..-1
的方法。更像“Anything -1 and under”之类的东西。我试过<=-1
,但编译器不太喜欢它。
在案例陈述中有没有办法做到这一点?
答案 0 :(得分:5)
对所有未处理的结果使用else
块,并在该块中区分失败的执行和没有显式处理程序的成功执行(最后一种情况是您似乎没有在您的示例代码中考虑。)
R:= DoSomething;
case R of
0: begin
//Success
end;
1: begin
// Another success
end
else begin
if R >= 0 then
// Unhandled successful execution error
else
//Failure
end;
end;
答案 1 :(得分:3)
您正在尝试强制使用严格case
,而应使用if
和case
的组合:
if R = 0 then
// Success
else
if R < 0 then
// Failure
else
begin // Positive values
case R of
1..99: ...
100..199: ...
// Other expected values
else
// Unexpected positive value
end;
end;
我个人会格式化以上内容以使流程更加清晰,但这是我自己的偏好:
if R = 0 then
// Success
else if R < 0 then
// Failure
else
begin // Positive values
case R of
1..99: ...
100..199: ...
// Other expected values
else
// Unexpected positive value
end;
end;
或者,更好的(正如拉里在回答我的回答中所提到的那样,但奇怪的是不在他的回答中):
if R < 0 then
// Failure
else
begin
case R of
0: // Success
1..99: // Expected positive values
100..199:
else
// Unexpected positives
end;
end;