为什么在尝试为字符串实现 class 助手时会出现 E2029 错误?

Why do I get E2029 error when trying to implement a class helper for string?

我们想创建一个非常方便和稳定的数据类型转换,这里使用Delphi中的class helper特性进行字符串数据类型转换。

type
  TStringHelper = class helper for String
  public
    function AsBoolean: Boolean;
    ...
  end;

{ TStringHelper }

function TStringHelper.AsBoolean: Boolean;
begin
  Result := False;
  try
    Result := StrToBool(Self);
  except
  end;
end;

当我尝试在 Delphi XE2 中编译上述代码时,我得到:

E2029 "declaration expected but string found"

我的代码有什么问题?

对于 string 类型,您需要使用 record 助手而不是 class 助手。

type
  TStringHelper = record helper for string
    ....  
  end;

请注意,基本数据类型的记录助手(例如 Integerdoublestring 等)仅在 XE3 中引入,因此如果您使用的是旧版本运气不好。