使用Delphi TDictionary将字符串用作案例陈述的索引

sfa*_*rdo 2 delphi dictionary

是否可以使用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)

Rem*_*eau 5

不,您不能在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)