AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.08.2024, 17:17   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,929 / 3227 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Как гарантированно проверить что объект = null
Привет.

При проверке на null бывают интересные случаи.
Например, добавили контрол на форме
X++:
formStringControl = element.design().addControl(FormControlType::String, "TestControl");
затем удалили
X++:
element.design().removeControl(formStringControl.id());
После этого отладчик показывает в окне просмотра значений, что переменная formStringControl - равна null

Если же в коде проверять
X++:
if (formStringControl)
то считает что ссылка ненулевая.
Но попытка вызвать на ней любой метод приводит к исключению.

Как можно предупредить такие случаи и понять что объект за ссылкой уже убит и она невалидна ? Ведь отладчик как-то это понимает при отображении значения в окне просмотра значений переменных.

Есть обходной способ - не хранить ссылки на контролы, а запоминать их идентификаторы и по мере надобности каждый раз доставать контрол по идентификатору.
X++:
formStringControl = element.design().addControl(FormControlType::String, "TestControl");
id = formStringControl.id();
...
element.design().removeControl(id);
...
if (id) 
{
    formStringControl  = element.design().control(id);
    if (formStringControl) // безопасная проверка - точно можно понять контрол еще жив или нет
    ...
}
Но ради понимания как там внутри все устроено, может можно все таки как-то безопасно понять жив объект за ссылкой или уже порушен (можно хоть один метод на нем безопасно вызвать или нет). Отладчик то как-то это понимает. Значит и мы можем.
Теги
null

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Быстродействие метда TaxParameters::find Ace of Database DAX: Программирование 7 01.06.2017 11:46
Ошибка при синхронизации Базы данных Art_Tanis DAX: Администрирование 1 24.12.2014 09:20
Проверить переменную на null PMS DAX: Программирование 16 26.09.2013 14:18
Real Data Type - No of decimals Yprit DAX: Программирование 10 30.03.2009 12:17
C# and AX Development: Using the COM Business Connector in C#, the easy way (AX/Axapta) Blog bot DAX Blogs 0 15.12.2007 20:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:41.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.