gpt4 book ai didi

delphi - 链接器消除了 TDictionary 上的 GetItem

转载 作者:行者123 更新时间:2023-12-03 18:49:44 26 4
gpt4 key购买 nike

我正在使用 TDictionary<string, string> .但是由于某种原因,链接器决定我不想从中获取项目。

我有以下代码:

function TSheet.GetFieldName(Field: string; Default: string): string;
begin
Result := Default;
if FFieldNames[Field] = '' then
Result := Field
else
Result := FFieldNames[Field];
end;
FFieldNamesTDictionary<string, string> .在第 2 行 ( if FFieldNames[Field] = '' then) 上,它抛出一个“找不到文件”异常。添加 FFieldNames[Field]我的 watch 告诉我要调用的函数 {System.Generics.Collections}TDictionary.GetItem 已被链接器消除。

Someone asked here on a similar issue关于如何避免链接器在调试期间消除功能。由此我收集到,编译器/链接器假定我没有使用它。有人建议 - 在谈话中 - 我应该尝试更多地使用它。

所以我创建了以下代码:
FFieldNames.Add(Name, S);
V := FFieldNames.Items[Name];

在哪里 S , NameV是字符串。这是来自 FFieldNames 的代码充满了数据。 V的唯一目的是获取刚刚插入的 S ;它什么也不做。

奇怪的是,虽然调试器告诉我同样的事情(即 GetItem 被淘汰),但 V确实设置为预期值。但它不在我的 TSheet.GetFieldName功能。 :|

我错过了什么?

最佳答案

同样的问题适用于 TList<> .即使代码使用类中的方法,调试器也无法访问它(“链接器消除了 TList 上的 xxx”)。我想这通常是泛型的问题。

如果你创建一个后代类就不会出现这个问题

type
TMyList = class(TList<TMyObject>)

end;

var
List : TMyList;
begin
...

end;

关于delphi - 链接器消除了 TDictionary 上的 GetItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15290943/

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