gpt4 book ai didi

delphi - 当值设置为空时,我可以阻止 TStringlist 删除键值对吗

转载 作者:行者123 更新时间:2023-12-03 14:53:53 33 4
gpt4 key购买 nike

当值设置为空时,我可以阻止 TStringList 删除键值对吗?我使用 Delphi XE8 和 Lazarus,它们的工作方式不同。即使该值设置为空字符串,我也希望该对保留在 TStringlist 对象中。例如:

procedure TMyClass.Set(const Key, Value: String);
begin
// FData is a TStringList object
FData.Values[Key] := Value; // Removes pair when value is empty. Count decreases and Key is lost.
end;

我遇到的问题是,当我用 Delphi 编译时,空值对被删除,并且我不知道之后是一个从未设置过键的值,还是显式设置为空字符串。我也无法获取所有已使用的 key 。现在我需要保存另一个 key 集合,其中包含有关空 key 的信息。

MyKeyValues.Set('foo', 'bar'); // Delphi FData.Count = 1; Lazarus FData.Count = 1
MyKeyValues.Set('foo', ''); // Delphi FData.Count = 0; Lazarus FData.Count = 1

最佳答案

你可以写一个class helper实现 TStrings 类的 SetValue 方法的新行为。

如果您不喜欢基于类帮助器的解决方案,您可以使用继承自 TStringList 的自定义类,并再次覆盖其 Values 属性行为- 代码与这个基于帮助器的实现非常相似。

我更愿意使用第二个选择,因为助手将为所有 TStringList 对象定义新行为。

type
TStringsHelper = class helper for TStrings
private
function GetValue(const Name: string): string;
procedure SetValue(const Name, Value: string); reintroduce;
public
property Values[const Name: string]: string read GetValue write SetValue;
end;


function TStringsHelper.GetValue(const Name: string): string;
begin
Result := Self.GetValue(Name);
end;

procedure TStringsHelper.SetValue(const Name, Value: string);
var
I: Integer;
begin
I := IndexOfName(Name);
if I < 0 then I := Add('');
Put(I, Name + NameValueSeparator + Value);
end;

关于delphi - 当值设置为空时,我可以阻止 TStringlist 删除键值对吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893377/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com