我正在尝试将IronPython实例方法分配给C#Func<Foo>
参数。
在C#中我会有一个方法:
public class CSharpClass
{
public void DoSomething(Func<Foo> something)
{
var foo = something()
}
}
然后从IronPython中调用它:
class IronPythonClass:
def foobar(self):
return Foo()
CSharpClass().DoSomething(foobar)
但我收到以下错误:
TypeError:期望Func [Foo],得到instancemethod
答案 0 :(得分:2)
行。我想我可能找到了解决方案:
import clr
clr.AddReference('System')
clr.AddReference('System.Core')
from System import Func
class IronPythonClass:
def foobar(self):
return Foo()
CSharpClass().DoSomething(Func[Foo](foobar))
有趣的是Func[Foo]
构造函数:)
答案 1 :(得分:1)
第一种选择是使用静态方法。为此,您必须使用@staticmethod
装饰器:
class IronPythonClass:
@staticmethod
def foobar():
return Foo()
CSharpClass().DoSomething(IronPythonClass.foobar)
如果您确实希望它是实例方法,那么您可以使用绑定方法:
class IronPythonClass:
def foobar(self):
return Foo()
ipc = IronPythonClass()
CSharpClass().DoSomething(ipc.foobar) # using ipc.foobar binds 'ipc' to the 'self' parameter
最后,您应该能够使用Func<object, Foo>
代替并按原先的方式传递实例方法。