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
相关产品推荐
相关产品推荐

