Как я могу перевести это объявление переменной C # в то, что может обработать IronPython? - PullRequest
0 голосов
/ 25 января 2012

Я не знаю, является ли это простым вопросом RTFM, но потерпите меня, как это было недавно, когда я использовал статически типизированный язык ...

Я портирую некоторый код C # наIronPython, и я только что наткнулся на это утверждение ниже.Я не вправе размещать реальный код, поэтому вместо этого напишу его псевдокодом:

data_type_1 variable_1 = variable_2 as data_type_2;

, где

variable_2 - этоCOM-объект из более ранних частей кода, variable_1 - это новая переменная, а data_type_1 - это класс, который взаимодействует с данными в COM-объекте.

Что это значит?Я предполагаю, что это какая-то форма обращения.Как я могу преобразовать его во что-то, что имеет смысл в IronPython?

Ответы [ 3 ]

2 голосов
/ 25 января 2012

Оператор as является оператором «безопасного приведения», он преобразует variable_2 в тип data_type_2.Если это преобразование завершается неудачно, оно не выдает исключение, а возвращает null.

Далее, чтобы иметь возможность присвоить значение data_type_2 (результат выражения «как») переменнойиз data_type_1, этот data_type_2 должен быть получен из data_type_1 (или реализовать интерфейс data_type_1).

1 голос
/ 25 января 2012

После нескольких часов убийства я подумал, что я мог бы сделать это простым, но, возможно, не самым красивым способом.Я просто скачал Visual C # 2010 Express (бесплатная версия) и написал минимальную библиотеку классов, содержащую один метод, состоящий только из сложного оператора.Затем я собрал dll, который был быстро импортирован и использован в оригинальном скрипте IronPython.

От идеи до рабочего решения потребовалось всего 10 минут.Престижность Microsoft, построить DLL было намного проще, чем я думал.

0 голосов
/ 25 января 2012

Как уже объяснил Ганс, оператор as конвертирует из одного типа в другой. Это необходимо для того, чтобы компилятор C # был доволен. IronPython, с другой стороны, не заботится - вы можете вызывать любую операцию, которую вам нужно, на variable_2, и если она не работает, вы получите ошибку во время выполнения.

Итак, короткая версия такова, что as не требуется в IronPython, и этот оператор может быть уменьшен до

variable_1 = variable_2

Если вам нужно проверить, принадлежит ли объект Python к определенному типу (или подклассу), используйте isinstance.

...