【问题标题】:Using Case Statement with String使用带字符串的 Case 语句
【发布时间】:2013-01-09 01:03:37
【问题描述】:

假设我有一个字符串

'SomeName'

并希望在 case 语句中返回值。这可以吗?字符串可以在这样的case语句中使用吗

Case 'SomeName' of

   'bobby' : 2;
   'tommy' :19;
   'somename' :4000;
else
   showmessage('Error');
end;

【问题讨论】:

标签: delphi delphi-xe2


【解决方案1】:

Delphi Case Statement 只支持序数类型。所以你不能直接使用字符串。

但存在其他选项,例如

【讨论】:

    【解决方案2】:

    在 Jcl 库中,您有 StrIndex 函数 StrIndex(Index, Array Of String),其工作原理如下:

    Case StrIndex('SomeName', ['bobby', 'tommy', 'somename']) of 
      0: ..code.. ;//bobby
      1: ..code..;//tommy
      2: ..code..;//somename
    else
      ShowMessage('error');
    end.
    

    【讨论】:

    • 或者只使用标准的 AnsiIndexStr 函数。
    • 或者在最近的 Delphi 版本中只是 IndexStr。 (如果您想要不区分大小写的比较,还有 -Text 版本。)
    【解决方案3】:

    @Daniel 的回答为我指明了正确的方向,但我花了一段时间才注意到“Jcl 库”部分和有关标准版本的 cmets。

    在 [至少] XE2 及更高版本中,您可以使用:

    Case IndexStr('somename', ['bobby', 'tommy', 'somename', 'george']) of 
      0: ..code..;                   // bobby
      1: ..code..;                   // tommy
      2: ..code..;                   // somename
     -1: ShowMessage('Not Present'); // not present in array
    else
      ShowMessage('Default Option'); // present, but not handled above
    end;
    

    此版本区分大小写,因此如果第一个参数是“SomeName”,它将采用not present in array 路径。使用IndexText 进行不区分大小写的比较。

    对于较旧的 Delphi 版本,请分别使用 AnsiIndexStrAnsiIndexText

    感谢@Daniel、@The_Fox 和@afrazier 为本答案的大部分组成部分。

    【讨论】:

    • IndexStr 和 AnsiIndexStr 也可以在 Delphi 2007 中使用。Unit StrUtils。
    【解决方案4】:

    适用于 D7 和 Delphi Seattle,

    uses StrUtils (D7) system.Ansistring (Delphi Seattle)
    
    case AnsiIndexStr(tipo, ['E','R'] )   of
          0: result := 'yes';
          1: result := 'no';
    end;
    

    【讨论】:

      【解决方案5】:

      我使用了 AnsiStringIndex 并且可以,但是如果您可以毫无问题地转换为数字:

      try
        number := StrToInt(yourstring);
      except
        number := 0;
      end;
      

      【讨论】:

        猜你喜欢
        • 2017-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 2014-03-02
        相关资源
        最近更新 更多