我有这个C#方法:
public static IDisposable RegisterErrorHandler(action<string,Exception> errorHandler)
如何在F#中创建errorHandler?
F#将自动将lambda函数转换为委托,如果它们具有正确的参数类型。就您而言,您应该能够通过编写以下代码来提供lambda函数:
Demo.RegisterErrorHandler(fun msg exn ->
printfn "Error with message %s and exception %A" msg exn)
请注意,您需要将两个参数写成以空格分隔,而不是用(msg,exn)
来表示一个元组。另外,您的lambda需要返回unit
-否则类型将不匹配。
在无法使其正常工作的情况下,显式创建委托很有用。通常,这通常会更容易找出lambda的问题所在:
Demo.RegisterErrorHandler(Action<string,Exception>(fun msg exn ->
printfn "Error with message %s and exception %A" msg exn))
在大多数情况下,尽管不需要显式Action
。