是否可以将字符串作为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 Stuntz,Ken White和Rob Kennedy的非常宝贵的评论,我编辑了这个答案来解决他们的所有观点.