使用带有字符串的Case语句

时间:2013-01-25 04:46:18

标签: delphi delphi-xe2

说我有一个字符串

'SomeName'

并希望在case语句中返回值。这个可以吗?可以在case语句中使用字符串,如此

Case 'SomeName' of

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

5 个答案:

答案 0 :(得分:35)

在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.

答案 1 :(得分:32)

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

但存在另一种选择,如

答案 2 :(得分:12)

@ Daniel的答案指出我正确的方向,但我花了一段时间才注意到“Jcl Library”部分和关于标准版本的评论。

在[至少] 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对此答案的大部分内容。

答案 3 :(得分:3)

适用于D7和Delphi Seattle,使用system.Ansistring

case AnsiIndexStr(tipo, ['E','R'] ) of 0: result := 'yes'; 1: result := 'no'; end;

答案 4 :(得分:0)

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

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