delphi - 记录类型的类型信息在运行时不起作用
问题描述
我在Delphi下编译有点问题:
function T_QS2ProcessMailbox.PutRec<T>(const aID: T_Barcode; var aRec: T;const aTxt: String): Boolean;
var
FA: T_FahrauftragRec absolute aRec;
LP: T_LagerpackungRec absolute aRec;
begin
init_Rec;
Rec.ID := aID;
Rec.EventTime := Now;
Rec.Text := aTxt;
if TypeInfo(T_LagerpackungRec) = TypeInfo(T) then
begin
Rec.RecType := C_QS_TYPE_TLAGERPACKUNGREC;
Rec.FA := FA;
end
else
if Typeinfo(T) = Typeinfo(T_LagerpackungRec) then
begin
Rec.RecType := C_QS_TYPE_TFAHRAUFTRAGREC;
Rec.LP := LP;
end
else
Rec.RecType := C_QS_TYPE_TEXT;
Send_TraceMsg(ClassName + '.PutRec Type=' + IntToStr(Rec.RecType));
Result := PutRec(Rec);
end;
它编译良好,没有错误、消息或提示。但它是在没有if
语句的情况下编译的。您可以在图片中查看它 - 此代码没有编译标记
我不懂为什么。
有人可以向我解释我做错了什么吗?
解决方案
这些if
语句可以在编译时解析,因此对于任何给定的T
. (换句话说,编译后的代码永远不会if
为这个函数执行任何代码)。
我可以想象只看到 1 个编译标记的 2 个原因。要么您的应用程序将只使用其中一条if
语句,要么 IDE 将所有if
语句的编译标记映射到同一行(我发现最后一个不太可能,但我在 IDE 中看到了奇怪的东西)。
另一种可能性是您的第二个if
应该阅读
if Typeinfo(T) = Typeinfo(T_FahrauftragRec) then
代替
if Typeinfo(T) = Typeinfo(T_LagerpackungRec) then
推荐阅读
- python - 如何在 python 中的 selenium 中获取此特定元素
- python - [已解决]我无法通过 pip install filename.whl 安装库
- cookies - 所有网站均可访问 Cookie
- docker - docker-compose --build 需要很长时间,占用大量空间
- flask - 如何运行烧瓶以利用系统范围的可信证书进行 https 访问?
- swift - Xcode 游乐场上的 SwiftUI 和 foreach 问题
- html - CSS HTML窗口大小调整问题
- sql - 基于条件的行号
- javascript - 为 react 中的组件创建一个自定义 onChange 函数作为参数,该函数接受 2 个自定义参数
- debugging - devenv 忽略断点