Delphi 有没有其他方法不使用-MAXINT来执行这个case语句?
我有一个case语句,它计算结果代码的整数(函数的结果),如下所示:Delphi 有没有其他方法不使用-MAXINT来执行这个case语句?,delphi,switch-statement,Delphi,Switch Statement,我有一个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
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
只是返回一个整数作为响应代码(或错误代码,为负数)的任何函数。如果它是一个错误,则会传递给另一个错误处理程序。如果是成功的,它将传递给成功处理程序(continue等)。正值将由各种特定的处理程序处理
我想知道是否有其他方法来编写
-MAXINT..-1
。更接近于“任何-1及以下”的意思。我尝试了对所有未处理的结果使用else
块,并在该块中区分失败的执行和没有显式处理程序的成功执行(最后一种情况是您在示例代码中似乎没有考虑到的)
您试图强制执行一个严格的案例
,您应该使用if
和案例
的组合:
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;
如果R=0,则
//成功
其他的
如果R<0,则
//失败
其他的
开始//正值
案例R
1..99: ...
100..199: ...
//其他预期值
其他的
//意外正值
结束;
结束;
我个人会对上述内容进行格式化,使流程更加清晰,但这是我自己的偏好:
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;
如果R=0,则
//成功
否则,如果R<0,则
//失败
其他的
开始//正值
案例R
1..99: ...
100..199: ...
//其他预期值
其他的
//意外正值
结束;
结束;
或者,更好的是(拉里在对我的回答的评论中提到了这一点,但奇怪的是他没有提到):
如果R<0,则
//失败
其他的
开始
案例R
0://成功
1..99://预期正值
100..199:
其他的
//意外的积极因素
结束;
结束;
什么是正值?@IgnacioVazquez Abrams好吧,这些将由其他案例陈述来处理,但我不想在这个问题中包括所有可能的值,因为这些值不一定相关(尽管同样适用于正值),最终会有许多具体的正值,我将在1..99
、100..199
、200..299
等范围内进行处理。但这些细节与问题无关。我不同意。:-)这一细节与问题密切相关。没有它,您根本不需要案例。您应该进行编辑,至少包括一条关于处理正数的注释。(如果有这个细节,我就不会在这里发表评论,也不会对拉里关于强制执行不必要的案例的回答发表评论)注意,最小整数值是-MAXINT-1
-MAXINT表示MAXINT符号已更改。不一定需要R>=0
,只需要R>0
从技术上讲,您只需要R>最后一次处理\u返回\u code
。但是,如果您正在管理大量案例,else
块将报告从显式处理案例列表中意外删除的任何R案例,这将是一个很好的防御编程。如果您编写R>0,然后删除0大小写,程序会给您一条错误消息,好像函数返回了一个失败代码,而实际上,它会返回一个您忘记处理的成功代码。@Ken:根据注释,真正的问题涉及一长串case
s。如果只有三种情况,则使用If
语句更合适。但对于10或20个并行案例,我认为OP使用案例
是正确的。当然,另一种选择是将案例
嵌套在if
中,这样只有正值提交给案例开关,但是如果出现未处理的成功代码,则在案例
中仍然需要else
。@Larry:如果特定的目的是故意忽略>0的值,没有“防御性编程”,你故意忽略了它们。然而,基于Jerry实际想要处理积极因素的“非相关细节”(如他对问题的评论所示),我的上述评论不再适用(它是基于他所说的仅处理0
和<0
的值)。他改变了问题,我将删除评论。:-)+1.我喜欢您嵌套到简洁易读的代码中的方式。0是一个预期结果(我收集的其中一个是一些可能成功的返回代码),在我看来,它应该作为case语句中的另一个预期值与它的对等方一起处理。@Larry:好的。那是你的喜好。它可能也是我的,但问题不是这样问的。:-)你贴出的答案也不是这样处理的。编辑以添加该备选方案。
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;