减少线条,用例?

ALD*_*-52 1 delphi case

如何减少线路,我可以使用case?我觉得这段代码太大了,没办法改进?

      if valmes.Text = '01' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '0';
      if valmes.Text = '02' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '1';
      if valmes.Text = '03' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '2';
      if valmes.Text = '04' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '3';
      if valmes.Text = '05' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '4';
      if valmes.Text = '06' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '5';
      if valmes.Text = '07' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '6';
      if valmes.Text = '08' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '7';
      if valmes.Text = '09' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '8';
      if valmes.Text = '10' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '9';
      if valmes.Text = '11' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '10';
      if valmes.Text = '12' then
      WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '11';
Run Code Online (Sandbox Code Playgroud)

例如:

case AnsiIndexStr(valmes.text, ['11', '12']) of
0: WebTesta.OleObject.Document.all.Item('expmonth', 0).value := '10';
Run Code Online (Sandbox Code Playgroud)

LU *_* RD 9

只是一种改进代码的简单方法:

var
  ix: Integer;
...
ix := StrToInt(valmes.Text);
WebTesta.OleObject.Document.all.Item('expmonth', 0).value := IntToStr(ix-1);
Run Code Online (Sandbox Code Playgroud)

您可以使用添加一些健全性检查if TryStrToInt(valmes.Text,ix) then ....

  • @RegisSantos我同意David Heffernan的观点.您需要添加其他验证代码以防止这种情况发生.当您的编辑可能不包含表示数值的字符串时,您还需要添加其他验证代码.BTW下次当你在代码中一个接一个地使用if语句的bucnh时,我强烈建议你使用if ... else if ... else语句.为什么?在您的情况下,每个单独的if语句将检查其条件是否得到满足.但是如果......如果一个条件匹配,则其他所有其他条件都被简单地跳过. (4认同)