(IronPython)从C#执行PythonFunction

时间:2010-01-07 18:12:32

标签: ironpython

这是情况......我希望能够将python lambda传递给C#方法,其中lambda的评估应该发生。当我传入lambda时,它变成了PythonFunction的一个实例。我被困在这里,因为我不知道如何执行这个PythonFunction。我在这个类上看到了一个“调用”,但我不知道它需要从哪里得到CodeContext。

任何人都知道怎么做?

3 个答案:

答案 0 :(得分:4)

如果您不想(或不能)使用委托,ObjectOperations类是更好的选择。可以从engine.ObjectOperations访问它(engineScriptEngine个实例)。

if(engine.ObjectOperations.IsCallable(myfunction))
    engine.ObjectOperations.Invoke(myfunction, args);

也就是说,强类型代表(System.ActionSystem.Func或您自己的代表)是更好的选择。如果不能选择更改函数签名,则可以使用engine.ObjectOperations.ConvertTo来获取委托。

答案 1 :(得分:2)

这里有一个类似的问题:

How to pass a lambda expression to a C# constructor from an IronPython script?

我的想法是使用System.Action委托接受python函数,然后像执行其他任务一样执行该委托。我不是百分百肯定,但我认为只要您的System.Action委托匹配,它就可以与IronPython lamda一起使用。

我希望这适合你。

答案 2 :(得分:0)

好的,我明白了:

var target = myfunction.__code__.Target;
result =  target.DynamicInvoke(new object[] {myfunction, argsForFunction})

其中myfunction是PythonFunction实例。