【问题标题】:Get Variable Name Using RTTI使用 RTTI 获取变量名
【发布时间】:2016-11-02 06:53:04
【问题描述】:

我正在尝试像这样使用 RTTI 获取变量名。

这是我的测试。

type
  TStringHelper = record helper for string
    function Name: string;
  end;

  TMyRecord = record
    Field1:string;
  end;

implementation

{ TStringHelper }
function TStringHelper.Name: string;
var
 context : TRttiContext;
begin
 context := TRttiContext.Create;
 result := context.GetType(@Self).Name; // return empty
 context.Free;
end;

procedure TForm2.FormCreate(Sender: TObject);
var
 r : TMyRecord;
begin
  ShowMessage(r.Field1.Name);
end;

返回的 TRttiType 名称为空。

有没有办法获取变量名?

【问题讨论】:

    标签: delphi rtti


    【解决方案1】:

    RTTI 提供有关类型而不是变量的信息。一般来说,在给定变量地址的情况下,使用 RTTI 是无法找到其名称的。

    RTTI 不仅没有帮助,而且您尝试的作为字符串对象的方法实际上是不可能的。想象一个场景,你有两个变量引用同一个对象。

    S := 'foo';
    T := S;
    

    这里的单个字符串对象的名称是什么。是S还是T?

    【讨论】:

    • 非常感谢您的解释。如果有 RTVI(运行时变量信息)就好了。 :)
    • 这里不需要任何“运行时”。编译器只需要一个在编译时将符号转换为字符串的内在函数。就像 C# 6 中的 nameof 函数一样。 - 投票给它:quality.embarcadero.com/browse/RSP-13290
    猜你喜欢
    • 2012-09-13
    • 2012-11-13
    • 2011-11-30
    • 1970-01-01
    • 2015-01-27
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多