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

Delphi中TQueue<TWorkData>泛型队列如何直接传参入队记录类型

解决方案

该需求完全可以实现,以下是三种常用实现方式:

方案1:给记录添加参数化构造函数(最通用规范)

Delphi 2006及以上版本支持记录定义带参数的构造函数,你可以修改TWorkData的定义:

type
  TWorkOwner = (woClient,woServer);

  TWorkData = record
    Owner : TWorkOwner;
    AMessage : string;
    MsgID : integer;
    // 新增参数化构造函数
    constructor Create(AOwner: TWorkOwner; const AMessageStr: string; AMsgID: Integer);
  end;

// 构造函数实现
constructor TWorkData.Create(AOwner: TWorkOwner; const AMessageStr: string; AMsgID: Integer);
begin
  Owner := AOwner;
  AMessage := AMessageStr;
  MsgID := AMsgID;
end;

入队时直接调用构造函数即可,写法和你预期的非常接近:

WorkFlow.Enqueue(TWorkData.Create(woClient, 'LogOn', MsgID));

方案2:封装辅助入队方法(完全匹配你想要的调用写法)

如果你不想修改原有TWorkData的定义,可以在当前类中封装一个私有辅助方法:

// 类的私有段新增方法声明
procedure EnqueueWorkItem(AOwner: TWorkOwner; const AMessage: string; AMsgID: Integer);

// 方法实现
procedure T你的类名.EnqueueWorkItem(AOwner: TWorkOwner; const AMessage: string; AMsgID: Integer);
var
  LWorkData: TWorkData;
begin
  LWorkData.Owner := AOwner;
  LWorkData.AMessage := AMessage;
  LWorkData.MsgID := AMsgID;
  WorkFlow.Enqueue(LWorkData);
end;

调用时完全符合你给出的伪代码写法:

EnqueueWorkItem(woClient, 'LogOn', MsgID);

方案3:用内联记录常量赋值(无需修改现有定义,适合高版本Delphi)

如果你使用的是Delphi 10.3 Rio及以上版本,支持内联变量和记录常量的简化写法,可以直接写:

WorkFlow.Enqueue(
  (
    Owner: woClient;
    AMessage: 'LogOn';
    MsgID: MsgID
  )
);

这种方式不需要额外新增构造函数或者辅助方法,直接在入队时完成记录字段赋值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:54:05