如何在 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