Gle*_*rse 33 delphi delphi-xe2
说我有一个字符串
'SomeName'
Run Code Online (Sandbox Code Playgroud)
并希望值在case语句中返回.这个可以吗?可以在case语句中使用字符串
Case 'SomeName' of
'bobby' : 2;
'tommy' :19;
'somename' :4000;
else
showmessage('Error');
end;
Run Code Online (Sandbox Code Playgroud)
Dan*_*iel 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.
Run Code Online (Sandbox Code Playgroud)
RRU*_*RUZ 32
Delphi Case Statement
仅支持序数类型.所以你不能直接使用字符串.
但存在另类选择
c32*_*dge 15
@ 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;
Run Code Online (Sandbox Code Playgroud)
此版本区分大小写,因此如果第一个参数是"SomeName",则它将采用该not present in array
路径.使用IndexText
不区分大小写的比较.
对于较旧的Delphi版本,分别使用AnsiIndexStr
或AnsiIndexText
.
感谢@Daniel,@ The_Fox和@afrazier对这个答案的大部分内容.
适用于 D7 和德尔福西雅图,
uses StrUtils (D7) system.Ansistring (Delphi Seattle) system.StrUtils (Berlin 10.1)
case AnsiIndexStr(tipo, ['E','R'] ) of
0: result := 'yes';
1: result := 'no';
end;
Run Code Online (Sandbox Code Playgroud)