找不到"Chars"的物业设定者

ThN*_*ThN 0 char oxygene delphi-prism

我正在尝试执行以下表达式,但我一直遇到此异常,"无法找到'chars'的属性设置器."

这是表达式:

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;
Run Code Online (Sandbox Code Playgroud)

"str"的值被传递给加密方法.

这是加密方法的一部分.做这个的最好方式是什么?

Kon*_*lph 5

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

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

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