首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有记录类型的Typeinfo在运行时不能工作。

带有记录类型的Typeinfo在运行时不能工作。
EN

Stack Overflow用户
提问于 2019-09-18 13:16:37
回答 1查看 239关注 0票数 0

在Delphi下编译有一个小问题:

代码语言:javascript
复制
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语句的情况下编译的。您可以在图片中查看它--这段代码没有编译标记。

我不明白为什么。

有人能给我解释一下我做的不对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-18 13:28:04

这些if语句可以在编译时解析,因此实际上只有1条语句将被实际编译为任何给定的T值。(换句话说,编译后的代码永远不会为这个函数执行任何if )。

我可以想象看到只有一个编译标记的两个原因。或者您的应用程序将只使用1条if语句,或者IDE将将所有if语句的编译标记映射到同一行(我发现最后一条不太可能,但我在IDE中看到了一些奇怪的事情)。

另一种可能是你的第二个if应该读

代码语言:javascript
复制
if Typeinfo(T) = Typeinfo(T_FahrauftragRec) then

而不是

代码语言:javascript
复制
if Typeinfo(T) = Typeinfo(T_LagerpackungRec) then
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57993705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档