#delphi
Как в Delphi проверить, что Integer переменной было ранее присвоено какое либо значение ?
Ответы
Ответ 1
По-настоящему - никак. Integer не хранит нигде никакой дополнительной информации, кроме тех 4 байт что на него выделено. Конечно, вы можете присвоить переменной какое-либо "волшебное" значение, которое никогда не встречается в ваших данных (например -1, или MaxInt, или 777777). И в простом приложении я бы так и сделал. Но однажды такое значение может вам встретиться и программа даст сбой. Также можно использовать другой готовый тип данных, типа Variant. Более правильный вариант - хранить информацию о присвоении в другой переменной, например IsIntegerAssigned: Boolean; и поддерживать ее состояние при каждой операции. Но это более громоздко и неудобно. Современный вариант - можно положить обе переменных в record и переопределить присвоение, примерно так: TMyInteger = record private fValue: Integer; fIsChanged: Boolean; public // Присвоение Integer class operator Implicit(const A: Integer): TMyInteger; // Чтение значения. Не помню, можно ли так же через неявную конвертацию или нет property Value: Integer read fValue; property IsChanged: Boolean read fIsChanged; // Тут еще надо переопределить конструктор New, который будет заполнять поля нулями // А можно сделать fIsChanged: string; тогда поле будет пустым при первом обращении) end; .... class operator TMyInteger.Implicit(const A: Integer): TMyInteger; begin Result.fValue := A; Result.fIsChanged := True; end; I := TMyInteger.New; I := 45; Assert(I.IsChanged, 'I is changed'); Ну и конечно убер-вариант - положить в класс.Ответ 2
Попробуйте создать вторую переменную потом сравнивайте примерно так myInt: Integer; myVar: Integer; if myInt==myVar then begin // он не изменился else // он изменился сохраняем новое значение myVar := myInt; end;
Комментариев нет:
Отправить комментарий