【问题标题】:Cannot find property setter for "Chars"找不到“字符”的属性设置器
【发布时间】:2012-08-20 13:15:24
【问题描述】:

我正在尝试执行以下表达式,但我一直遇到这个异常,“找不到 '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”的值被传递到加密方法中。

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

【问题讨论】:

    标签: char delphi-prism oxygene


    【解决方案1】:

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

    一般来说,System.Text.StringBuilder 类提供了一个可变字符串实例。

    事实上,即使不是因为字符串的不变性,你的代码也会因为你没有分配一个字符串而失败,所以分配给xstr[i]会导致缓冲区溢出例外。使用char 的数组时需要这样做。

    【讨论】:

    • 使用指针的不安全解决方案怎么样?在delphi中可以吗?
    • @Kuba 也许。但它有什么优势呢? 也许表现。但可能甚至不是。
    • @KubaWyrostek 这不安全,几乎从不推荐。
    • 我只是好奇,因为我知道如何在 C# 中做到这一点。
    • 康拉德,您的回答正是我所需要的。我能够修改我的代码并让它工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 2017-03-16
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2015-09-26
    • 2017-06-29
    相关资源
    最近更新 更多