Как передать метод экземпляра IronPython параметру функции (C #) типа `Func <Foo>` - PullRequest
3 голосов
/ 13 апреля 2010

Я пытаюсь назначить метод экземпляра IronPython параметру C # Func<Foo>.

В C # у меня был бы такой метод:this:

class IronPythonClass:
    def foobar(self):
        return Foo()
CSharpClass().DoSomething(foobar)

Но я получаю следующую ошибку:

Ошибка типа: ожидается Func [Foo], получен instancemethod

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

OK. Я думаю, что мог бы найти решение:

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 голос
/ 13 апреля 2010

Первый вариант - использовать статический метод. Для этого вам нужно использовать декоратор @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> и передать метод экземпляра, как вы изначально пытались это сделать.

...