找不到“Chars”的物业设定者

时间:2012-08-20 13:15:24

标签: char delphi-prism oxygene

我正在尝试执行以下表达式,但我一直遇到此异常,"找不到'字符的属性设置器。'

这是表达式:

xstr, str : string;
for i := 1 to length(str) do
begin
  if ((i mod 2)<>0) then
  begin
    xstr[i] := char(Ord(str[i]) xor $AA);  <<<<------ Exception Raised
  end
  else
  begin
    xstr[i] := char(Ord(str[i]) xor $55);  <<<<------ Exception Raised
  end;
end;

&#34; str&#34;的价值传递给加密方法。

这是加密方法的一部分。这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:5)

System.String是一个不可变类,这意味着您无法修改它的实例。 .NET需要修改字符串操作以创建字符串的新实例。为了您的目的,创建修改后的字符的char数组然后从中构造一个字符串可能是最简单和最有效的。

通常,System.Text.StringBuilder类提供可变字符串实例。

事实上,即使它不是字符串的不变性,你的代码也会失败,因为你没有分配一个字符串,因此赋值给xstr[i]会产生一个字符串。缓冲区溢出异常。使用char数组时需要这样做。