如何将字符串变量作为TSysCharSet传递

3 delphi

是否可以将字符串作为TSysCharSet变量传递?

这当然不编译:

var
  AValidChars: SysUtils.TSysCharSet;
  AResult: string;
begin
  // Edit1.Text can contain 0..9 or a..z
  AValidChars := SysUtils.TSysCharSet( [Edit1.Text] );
end;
Run Code Online (Sandbox Code Playgroud)

比尔,谢谢

mgh*_*hie 5

不,不可能简单地将字符串作为TSysCharSet传递.

但是,您可以创建一个包含字符串中所有字符的TSysCharSet.这段代码会这样做:

var
  AValidChars: SysUtils.TSysCharSet;
  s: AnsiString;
  i: integer;
begin
  // Edit1.Text can contain 0..9 or a..z
  AValidChars := [];
  s := Edit1.Text;
  for i := 1 to Length(s) do
    Include(AValidChars, s[i]);
end;
Run Code Online (Sandbox Code Playgroud)

如果你没有使用早期的Delphi版本,你也可以使用"for ... in"而不是上面的循环:

var
  AValidChars: SysUtils.TSysCharSet;
  c: AnsiChar;
begin
  // Edit1.Text can contain 0..9 or a..z
  AValidChars := [];
  for c in Edit1.Text do
    Include(AValidChars, c);
end;
Run Code Online (Sandbox Code Playgroud)

请注意,在两个代码片段中都使用了AnsiString/AnsiChar,因为此技术不适用于WideString或Delphi 2009引入的Unicode字符串类型.

非常感谢Craig Stuntz,Ken WhiteRob Kennedy的非常宝贵的评论,我编辑了这个答案来解决他们的所有观点.