GetItem в TDictionary, очищенный компоновщиком
Я использую 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
функция.:|
Что мне не хватает?
1 ответ
Та же проблема относится к TList<>
, Даже если код использует метод в классе, он не доступен из отладчика ("xxx в TList исключен компоновщиком"). Я думаю, что это проблема с дженериками в целом.
Если вы сделаете потомок класса, у него не будет этой проблемы
type
TMyList = class(TList<TMyObject>)
end;
var
List : TMyList;
begin
...
end;