当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将字符串变量作为TSysCharSet传递》经验,为你挑选了1个好方法。

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

这当然不编译:

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

比尔,谢谢



1> mghie..:

不,不可能简单地将字符串作为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的非常宝贵的评论,我编辑了这个答案来解决他们的所有观点.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有