0

我正在尝试执行以下表达式,但我一直遇到这个异常,“找不到'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;

“str”的值被传递到加密方法中。

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

4

1 回答 1

5

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

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

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

于 2012-08-20T13:17:42.970 回答