如何在 F# 中使用 C# 动作类型?
How to use the C# action type in F#?
我有这个 C# 方法:
public static IDisposable RegisterErrorHandler(Action<string, Exception> errorHandler)
如何在 F# 中创建错误处理程序?
如果参数类型正确,F# 将自动将 lambda 函数转换为委托。在你的情况下,你应该能够通过编写来提供一个 lambda 函数:
Demo.RegisterErrorHandler(fun msg exn ->
printfn "Error with message %s and exception %A" msg exn)
请注意,您需要将两个参数写成 space 分开,而不是 (msg, exn)
,后者表示一个元组。此外,您的 lambda 需要 return unit
- 否则类型将不匹配。
在您无法使其工作的情况下,显式创建委托很有用。这通常可以更容易地找出您的 lambda 有什么问题:
Demo.RegisterErrorHandler(Action<string, Exception>(fun msg exn ->
printfn "Error with message %s and exception %A" msg exn))
但在大多数情况下,您不需要显式 Action
。
我有这个 C# 方法:
public static IDisposable RegisterErrorHandler(Action<string, Exception> errorHandler)
如何在 F# 中创建错误处理程序?
如果参数类型正确,F# 将自动将 lambda 函数转换为委托。在你的情况下,你应该能够通过编写来提供一个 lambda 函数:
Demo.RegisterErrorHandler(fun msg exn ->
printfn "Error with message %s and exception %A" msg exn)
请注意,您需要将两个参数写成 space 分开,而不是 (msg, exn)
,后者表示一个元组。此外,您的 lambda 需要 return unit
- 否则类型将不匹配。
在您无法使其工作的情况下,显式创建委托很有用。这通常可以更容易地找出您的 lambda 有什么问题:
Demo.RegisterErrorHandler(Action<string, Exception>(fun msg exn ->
printfn "Error with message %s and exception %A" msg exn))
但在大多数情况下,您不需要显式 Action
。