You need to enable JavaScript to run this app. 如何在Delphi中存储带自定义名称的FireDAC书签列表?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi中存储带自定义名称的FireDAC书签列表?

可行实现方案

方案1:直接使用TDictionary<string, TBookmark>(最简便)

Delphi 自带的泛型字典原生支持键值对存储,直接用字符串作为键、TBookmark 作为值即可满足“名称绑定书签”的需求,只需额外封装默认索引器就能匹配你要的调用语法。
首先需要在 uses 引入 System.Generics.Collections 单元,自定义封装类代码如下:

type
  TBookmarkList = class(TDictionary<string, TBookmark>)
  public
    // 定义默认索引器,支持括号直接取值
    default property Items[const Name: string]: TBookmark read GetValue write SetValue;
  end;

调用逻辑完全符合你的预期:

// 先添加绑定关系
var mySL := TBookmarkList.Create;
mySL.Add('test1', 你的书签对象1);
mySL.Add('test2', 你的书签对象2);

// 直接按名称取书签
var myBookmark1 := mySL('test1');
var myBookmark2 := mySL('test2');

该方案查询效率为O(1),适合书签数量较多的场景。

方案2:基于TStringList扩展(兼容原有TStringList特性)

如果你需要保留TStringList的排序、去重、遍历字符串列表等原生特性,也可以直接继承TStringList做封装:

type
  TBookmarkList = class(TStringList)
  public
    property Items[const Name: string]: TBookmark read GetBookmark write SetBookmark; default;
    procedure AddBookmark(const Name: string; ABookmark: TBookmark);
  private
    function GetBookmark(const Name: string): TBookmark;
    procedure SetBookmark(const Name: string; ABookmark: TBookmark);
  end;

implementation

function TBookmarkList.GetBookmark(const Name: string): TBookmark;
var
  Idx: Integer;
begin
  Idx := IndexOf(Name);
  if Idx = -1 then raise Exception.Create('书签名称不存在');
  Result := TBookmark(Objects[Idx]);
end;

procedure TBookmarkList.SetBookmark(const Name: string; ABookmark: TBookmark);
var
  Idx: Integer;
begin
  Idx := IndexOf(Name);
  if Idx = -1 then
    AddObject(Name, ABookmark)
  else
    Objects[Idx] := ABookmark;
end;

procedure TBookmarkList.AddBookmark(const Name: string; ABookmark: TBookmark);
begin
  AddObject(Name, ABookmark);
end;

该方案可以直接复用TStringList的所有原生操作方法,适合需要兼容旧有TStringList使用习惯的场景。

补充说明

如果你的TBookmark需要手动管理生命周期,只需在继承类的析构函数中遍历所有元素释放书签对象即可,无需额外调整调用逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:27:03