Использование Delphi TDictionary для использования строки в качестве индекса для оператора case - PullRequest
2 голосов
/ 09 октября 2019

Можно ли использовать операторы 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;

1 Ответ

5 голосов
/ 09 октября 2019

Нет, вы не можете сделать это в 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;
  • перечисление словаря:
var
  mydic : TDictionary<string, smallint>;
  mypair: TPair<string, smallint>;
begin
  mydic := TDictionary<string, smallint>.Create;
  mydic.Add('A option', 1);
  mydic.Add('B option', 2);
  mydic.Add('C option', 3);

  for mypair in mydic do
  begin
    if mypair.Value = someintegervariable then
    begin
      if mypair.Key = 'A option' then
      begin
        // do stuff for case 1 ...
      end
      else if mypair.Key = 'B option' then
      begin
        // do stuff for case 2 ...
      end
      else if mypair.Key = 'C option' then
      begin
        // do stuff for case 3 ...
      end;
      Break;
    end;
  end;

  mydic.Free;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...