使用 RTTI 获取变量名
Get Variable Name Using RTTI
我正在尝试像这样使用 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?
我正在尝试像这样使用 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?