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

标签 delphi

是否可以将字符串作为 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 WhiteRob Kennedy鉴于他们非常宝贵的意见,我编辑了这个答案以解决他们的所有观点。

关于delphi - 如何将字符串变量作为 TSysCharSet 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561457/

相关文章:

delphi - 如何完整捕获一个窗口?

delphi - Delphi 7 中的 FormShow 问题

delphi - Delphi 中超出数字类型限制的验证

delphi - IDE编译成功,但dcc32写入: Error: E2010 Incompatible types: 'Integer' and 'NativeInt'

delphi - 在 indy TCP 中发送消息

performance - TDictionary<TObject, TObject> 的默认 IEqualityComparer?

delphi - 在显示之前修改 DBGrid 单元格内容

delphi - (delphi 应用程序)发现错误的位置

delphi - 使用 StringList :\n vs #13#10 vs sLineBreak 解析文本

c++ - E2108 typedef 使用不当 'TJSONObject' 使用 GetValue 路径评估器时出错