我正在尝试执行以下表达式,但我一直遇到此异常,"找不到'字符的属性设置器。'
这是表达式:
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;的价值传递给加密方法。
这是加密方法的一部分。这样做的最佳方式是什么?
答案 0 :(得分:5)
System.String
是一个不可变类,这意味着您无法修改它的实例。 .NET需要修改字符串操作以创建字符串的新实例。为了您的目的,创建修改后的字符的char
数组然后从中构造一个字符串可能是最简单和最有效的。
通常,System.Text.StringBuilder
类提供可变字符串实例。
事实上,即使它不是字符串的不变性,你的代码也会失败,因为你没有分配一个字符串,因此赋值给xstr[i]
会产生一个字符串。缓冲区溢出异常。使用char
数组时需要这样做。