You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中能否获取变量名作为字符串?如何实现?

实现获取变量名称的函数:可行方案

完全可以实现,无需依赖RTTI,利用Delphi预处理器的字符串化运算符就能在编译期完成变量名的提取,支持任意数据类型。

实现方式

1. 预处理器宏(最简单直接)

通过Delphi预处理器的#运算符,将宏参数直接转换为字符串:

// 定义宏
{$DEFINE GetVariableName(X) := #X}

// 使用示例
var
  FirstName: String;
  LastName: String;
  Age: Integer;
begin
  // 调用宏获取变量名
  Writeln(GetVariableName(FirstName)); // 输出 "FirstName"
  Writeln(GetVariableName(LastName));  // 输出 "LastName"
  Writeln(GetVariableName(Age));       // 输出 "Age"
end;

2. 内联函数包装(更符合函数调用习惯)

如果希望以函数形式调用,可以结合内联函数和宏,保持编译期处理的特性:

function GetVariableName<T>(const Value: T): string; inline;
begin
  // 利用预处理器字符串化,通过宏中转实现
  {$DEFINE __GETVARNAME__ := #Value}
  Result := __GETVARNAME__;
  {$UNDEF __GETVARNAME__}
end;

// 使用示例
var
  FirstName: String;
  Age: Integer;
begin
  Writeln(GetVariableName(FirstName)); // 输出 "FirstName"
  Writeln(GetVariableName(Age));       // 输出 "Age"
end;

注意事项

  • 该方案是编译期处理,性能无损耗,但仅能识别直接传入的变量名;如果传入表达式(如GetVariableName(FirstName + 'Test')),会返回整个表达式的字符串而非变量名。
  • 支持所有数据类型,包括自定义类型、局部变量、全局变量、类成员变量等。

内容的提问来源于stack exchange,提问作者Shaun Roselt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:12:39