检查字符串常量是否包含在一组字符串中

Check if a string constant is contained in a set of strings

在现代 Delphi(悉尼)中最好和最简单的方法是什么:

var ThisExtension: string;
if ThisExtension in ['.jpeg', '.jpg', '.jpe', '.jif', '.jfif'] then

上面的代码给我这个编译器错误:

E2015 Operator not applicable to this operand type

System.StrUtils 单元对此有一个简单的功能:

if System.StrUtils.MatchText(ThisExtension, ['.jpeg', '.jpg', '.jpe', '.jif', '.jfif']) then

我不知道这是否是最现代的方法。 (也许 Generics 有更好的方法?)。但它又快又简单。

也许不是最简单或最优雅的,但你可以使用 TStringList,例如:

var
  Exts: TStringList;

procedure InitExtensions;
begin
  Exts := TStringList.Create;
  Exts.CaseSensitive := ...; // false by default
  Exts.Add('.jpeg');
  Exts.Add('.jpg');
  Exts.Add('.jpe');
  Exts.Add('.jif');
  Exts.Add('.jfif');
end;

...

var
  ThisExtension: string;
begin
  ...
  if Exts.IndexOf(ThisExtension) <> -1 then
  begin
    ...
  end;
  ...
end;

...

initialization
  InitExtensions;
finalization
  Exts.Free;
end.