是否可以使用TDictionary和这样的case语句?
这只是一个想法,不确定是否可行。
(不是实际的Delphi代码)
mydic : tdictionary<string,smallint>
mydic := tdictionary<string,smallint>.create;
mydic.add('A option',1);
mydic.add('B option',2);
mydic.add('C option',3);
case someintegervariable of
mydic('A option'): Begin
//do stuff like case 1:
end;
mydic('B option'): Begin
//do stuff like case 2:
end;
mydic('C option'): Begin
//do stuff like case 3:
end;
end;
Run Code Online (Sandbox Code Playgroud)
不,您不能在Delphi中做到这一点。 case语句需要为每个要处理的值提供一个编译时数字常量。
对于您的要求,您将必须:
if-else声明:var
mydic : TDictionary<string, smallint>;
begin
mydic := TDictionary<string, smallint>.Create;
mydic.Add('A option', 1);
mydic.Add('B option', 2);
mydic.Add('C option', 3);
if someintegervariable = mydic['A option'] then
begin
// do stuff for case 1 ...
end
else if someintegervariable = mydic['B option'] then
begin
// do stuff for case 2 ...
end
else if someintegervariable = mydic['C option'] then
begin
// do stuff for case 3 ...
end;
mydic.Free;
end;
Run Code Online (Sandbox Code Playgroud)
var
mydic : TDictionary<string, smallint>;
begin
mydic := TDictionary<string, smallint>.Create;
mydic.Add('A option', 1);
mydic.Add('B option', 2);
mydic.Add('C option', 3);
if someintegervariable = mydic['A option'] then
begin
// do stuff for case 1 ...
end
else if someintegervariable = mydic['B option'] then
begin
// do stuff for case 2 ...
end
else if someintegervariable = mydic['C option'] then
begin
// do stuff for case 3 ...
end;
mydic.Free;
end;
Run Code Online (Sandbox Code Playgroud)