我正在使用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;
FFieldNames
是一个TDictionary<string, string>
。在第 2 行 ( if FFieldNames[Field] = '' then
) 中,它会引发“找不到文件”异常。添加FFieldNames[Field]
到我的手表告诉我要调用的函数 {System.Generics.Collections}TDictionary.GetItem 已被链接器消除。
有人在这里问过类似的问题,关于如何避免链接器在调试期间消除功能。由此我收集到,编译器/链接器假定我没有使用它。有人建议——在谈话中——我应该尝试更多地使用它。
所以我创建了以下代码:
FFieldNames.Add(Name, S);
V := FFieldNames.Items[Name];
其中S
和是Name
字符串V
。这是来自FFieldNames
填充数据的代码。 V
的唯一目的是获取刚刚插入的S
;它什么也不做。
奇怪的是,虽然调试器告诉我同样的事情(GetItem
即被淘汰),V
但它确实被设置为预期值。但它不在我的TSheet.GetFieldName
功能中。:|
我错过了什么?