|
16.06.2010, 21:41 | #1 |
Участник
|
Преобразование 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 |
Участник
|
да вроде никакая и не ошибка, типы то разные
|
|
16.06.2010, 22:33 | #3 |
Участник
|
Об этом написано в 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 |
Участник
|
Спасибо за ссылку
Однако...
В приведенном примере мы как-раз и присваиваем одной переменной значение второй и не производим никаких других операций. Иллюстрирую: 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 |
Участник
|
в данном случае все верно компилится, т.к. типы возвращаемых значений оператора "?:" совпадают
|
|
17.06.2010, 13:19 | #6 |
Участник
|
Мне не остается ничего другого, кроме как согласиться, что это не баг, а фича.
|
|
Теги |
ошибка компиляции |
|
|