我试图像这样使用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返回的名称为空.
有没有办法得到变量名?
解决方法
RTTI提供有关类型而不是变量的信息.通常,在给定变量地址的情况下,使用RTTI无法找到其名称.
RTTI不仅没有帮助,而且您正在尝试的,作为字符串对象的方法,实际上是不可能的.想象一下,有两个变量引用同一个对象的场景.
S := 'foo'; T := S;
这里单个字符串对象的名称是什么.是S还是T?