2011-02-03 26 views
1

VB.NET代碼:F#如何AddHandler的一致好評VB.NET

AddHandler TheGrp.DataChanged, AddressOf theGrp_DataChange 

所以,我該怎麼辦同在F#?

theGrp.DataChanged.AddHandler(X.theGrp_DataChange) 

錯誤1這個函數的參數太多,或者在上下文中使用的其中一個功能預計不會

回答

2

的嘗試theGrp.DataChanged.AddHandler(fun o e -> X.theGrp_DataChange(o, e))AddHandler的簽名表示它需要一個委託,所以您可以顯式創建一個(通過像DataChangedEventHandler(fun o e -> X.theGrp_DataChange(o, e))之類的東西),或者在給定函數定義時讓編譯器隱式添加委託構造函數,但不能只使用方法本身。

2

另外,如果你不想明確創建一個lambda表達式,你也可以寫(在這種情況下,該功能通過簽署委託要求的簽名相匹配,所以它應該工作):

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

另外,如果你不需要發件人的說法,你可以聲明theGrp_DataChanged方法只拿事件參數參數,然後寫只是:

theGrp.DataChanged.Add(x.theGrp_DataChanged)