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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2010, 21:41   #1  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Преобразование System.String в str
Забавная ошибка компиляции:
X++:
static void Job20(Args _args)
{
    str             string;
    System.String   systemString;
    boolean         condition
    ;

    string = systemString;          // Нет проблем!

    string = condition ?
                    string :
                    systemString;   // Ошибка: Operand types are not compatible with the operator.
}

Приходится обходиться if else.
AX2009 SP1
Старый 16.06.2010, 22:13   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
да вроде никакая и не ошибка, типы то разные
Старый 16.06.2010, 22:33   #3  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Hyper Посмотреть сообщение
Забавная ошибка компиляции:
Об этом написано в msdn. Для того, чтобы отрабатывал маршалинг нужно использовать оператор =
Цитата:
Operator Limitations

When you work with .NET primitive types in X++ code, you can use the X++ equal sign (=) assignment operator. However, no other operators can be used with CLR primitives. For instance, you cannot use the comparison operators (such as == or >). Also, you cannot use bitwise operators (such as & or |).
За это сообщение автора поблагодарили: b_nosoff (1).
Старый 16.06.2010, 22:58   #4  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Спасибо за ссылку
Однако...

В приведенном примере мы как-раз и присваиваем одной переменной значение второй и не производим никаких других операций. Иллюстрирую:
X++:
static void Job20(Args _args)
{
    str             string;
    System.String   systemString1;
    System.String   systemString2;
    boolean         condition;
    ;

    string = condition ?
                    systemString1 :
                    systemString2;      // Компилируется без проблем!
}

Невелика беда в любом случае. Причину такого поведения легко можно понять, но можно и поспорить, насколько оно логично.

Последний раз редактировалось Hyper; 16.06.2010 в 23:01.
Старый 17.06.2010, 10:15   #5  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
в данном случае все верно компилится, т.к. типы возвращаемых значений оператора "?:" совпадают
Старый 17.06.2010, 13:19   #6  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Мне не остается ничего другого, кроме как согласиться, что это не баг, а фича.
Теги
ошибка компиляции

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
X++: More help needed from community: Do you rely on string truncation? Blog bot DAX Blogs 4 19.03.2010 10:50
palleagermark: Create a 64-bit encoded string from an image in AX Blog bot DAX Blogs 0 22.01.2010 15:05
emeadaxsupport: Error during Hotfix installation - "Version string portion was too short or too long" Blog bot DAX Blogs 0 13.11.2009 21:05
Преобразование из COMVariantType::VT_SAFEARRAY в String if_maks DAX: Программирование 4 09.06.2009 17:48
daxsol: Axapta Kernel Functions Blog bot DAX Blogs 1 16.05.2009 19:22
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:05.