我可以将IronPython 2课程带回我的C#。什么是新的IronPython 2方式调用该类的成员?
object ironPythonClass = scope.GetVariable("Hamish");
object[] args = new object[0];
object pythonObject = engine.Operations.Call(ironPythonClass, args);
var member = "Home";
// old way IronPython 1
// var methodResult = Ops.Invoke(this.pythonObject, SymbolTable.StringToId(member), args);
我认为我所要做的就是
var methodResult = PythonOps.Invoke(codeContext, pythonObject, SymbolTable.StringToId(member), args);
但是创建一个虚拟CodeContext似乎不对。我觉得我应该能够从我的
中获得一个code.Execute();
运行创建类的Python文件,以及执行时产生的范围。
答案 0 :(得分:3)
找到了一种方法:
var ops = engine.Operations;
var x = ops.GetMember(pythonObject, member);
var h = ops.Call(x, new object[0]);
看起来Operations会生成一个具有有用成员的OperationsObject。
查看DLR代码(Microsoft.Scripting.Hosting)但是我看到Call已被弃用:
[Obsolete("Use Invoke instead")]
public object Call(object obj, params object[] parameters) {
return _ops.Invoke(obj, parameters);
}
我的脚本编辑0.9.20209,但是还没有Invoke。
更新到更新的IronPython 2.6Beta及其脚本dll后,我发现我可以写:
var h = ops.InvokeMember(pythonObject, member, new object[0]);