我正在使用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已被链接器删除。
Someone asked here on a similar issue关于如何在调试期间避免链接器消除函数。从此我收集到,编译器/链接器假定我没有使用它。有人建议 - 在谈话期间 - 我应该尝试使用 more 。
所以我创建了以下代码:
FFieldNames.Add(Name, S);
V := FFieldNames.Items[Name];
S
,Name
和V
是字符串。这是来自FFieldNames
填充数据的代码。 V
的唯一目的是获取刚刚插入的S
;它没有别的。
奇怪的是,虽然调试器告诉我同样的事情(即GetItem
被删除),但V
确实设置为预期值。但它不在我的TSheet.GetFieldName
函数中。 :|
我错过了什么?
答案 0 :(得分:0)
同样的问题适用于MARGIN=c(1,2)
。即使代码在类中使用了一个方法,也无法从调试器中访问它(&#34; TList上的xxx被链接器消除了#34;)。我想这是泛型一般的问题。
如果你做了一个后代课,那就不会有这个问题了
TList<>