F # как добавить AddHandler в VB.NET - PullRequest
1 голос
/ 03 февраля 2011

Код VB.NET:

AddHandler TheGrp.DataChanged, AddressOf theGrp_DataChange

Так, как я могу сделать то же самое с F #?

theGrp.DataChanged.AddHandler(X.theGrp_DataChange)

Ошибка 1 Эта функция принимает слишком много аргументов или используется в контексте, где функция не ожидается

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

В качестве альтернативы, если вы не хотите явно создавать лямбда-выражение, вы также можете написать (в этом случае сигнатура функции соответствует сигнатуре, требуемой делегатом, поэтому она должна работать):

theGrp.DataChanged.AddHandler(DataChangedEventHandler(x.theGrp_DataChanged))

Кроме того, если вам не нужен аргумент sender , вы можете объявить метод theGrp_DataChanged, который будет принимать только аргумент args аргумента события, а затем написать просто:

theGrp.DataChanged.Add(x.theGrp_DataChanged)
2 голосов
/ 03 февраля 2011

Попробуйте theGrp.DataChanged.AddHandler(fun o e -> X.theGrp_DataChange(o, e)). Подпись для AddHandler указывает, что он принимает делегат, поэтому вы можете явно создать его (через что-то вроде DataChangedEventHandler(fun o e -> X.theGrp_DataChange(o, e))) или позволить компилятору неявно добавить конструктор делегата, когда дано определение функции, но вы не можете просто используйте сам метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...