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

这当然不会编译:

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


谢谢,
法案

最佳答案

不,不可能简单地将字符串作为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;


如果您不使用较早的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;


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

非常感谢Craig StuntzKen WhiteRob Kennedy的宝贵意见,我编辑了此答案以解决他们的所有观点。

10-08 04:48