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;
Другие вопросы по тегам