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 に答える