我不知道这是否只是RTFM的一个简单问题,但是就像我刚才使用静态类型的语言一样... ...
我正在将一些C#代码移植到IronPython,我只是偶然发现了下面这个声明。我不能随意发布实际的代码,所以我会用伪代码写它:
data_type_1 variable_1 = variable_2 as data_type_2;
,其中
variable_2
是来自代码前面部分的COM对象,variable_1
是一个新变量,data_type_1
是一个与COM对象中的数据交互的类。
这是什么意思?我猜它是某种形式的转换。如何将其转换为IronPython可以理解的内容?
答案 0 :(得分:2)
as
运算符是“安全转换”运算符,它将variable_2
转换为data_type_2
类型。如果转换失败,则不会抛出异常,而是返回null
。
此外,为了能够将值data_type_2
('as'表达式的结果)赋值给data_type_1
的变量,data_type_2必须从data_type_1派生(或实现接口) data_type_1)。
答案 1 :(得分:1)
杀了几个小时后,我想我也可以这么简单,但也许不是最漂亮的方式。我只是下载了Visual C#2010 Express(免费版)并编写了一个包含一个仅包含麻烦语句的方法的最小类库。然后我构建了dll,它被迅速导入并在原始的IronPython脚本中使用。
从创意到工作解决方案,只用了10分钟。对微软的称赞,构建一个dll比我想象的要简单得多。
答案 2 :(得分:0)
汉斯已经解释过,as
运算符从一种类型转换为另一种类型。这是保持C#编译器满意的必要条件。另一方面,IronPython并不关心 - 您可以在variable_2
上调用所需的任何操作,如果它不起作用,您将在运行时收到错误。
所以,简短的版本是IronPython中不需要as
,而且该语句可以简化为
variable_1 = variable_2
如果确实需要检查Python对象是否属于特定类型(或子类),请使用isinstance
。