F#如何将AddHandler与VB.NET相提并论

时间:2011-02-03 07:00:50

标签: f#

VB.NET代码是:

AddHandler TheGrp.DataChanged, AddressOf theGrp_DataChange

那我怎么能用F#做什么?

theGrp.DataChanged.AddHandler(X.theGrp_DataChange)

错误1此函数需要太多参数,或者在不期望函数的上下文中使用

2 个答案:

答案 0 :(得分:2)

试试theGrp.DataChanged.AddHandler(fun o e -> X.theGrp_DataChange(o, e))AddHandler的签名表示它需要一个委托,因此您可以显式创建一个(通过类似DataChangedEventHandler(fun o e -> X.theGrp_DataChange(o, e))之类的东西),也可以让编译器在给定函数定义时隐式添加委托构造函数,但是你不能只使用这个方法本身。

答案 1 :(得分:2)

或者,如果您不想显式创建lambda表达式,也可以编写(在这种情况下,函数签名与委托所需的签名匹配,因此它应该起作用):

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

此外,如果您不需要 sender 参数,则可以声明theGrp_DataChanged方法仅采用 event args 参数,然后再编写:

theGrp.DataChanged.Add(x.theGrp_DataChanged)