如何在F#中使用C#动作类型?

我有这个C#方法:

public static IDisposable RegisterErrorHandler(action<string,Exception> errorHandler)

如何在F#中创建errorHandler?

crazyboylp 回答:如何在F#中使用C#动作类型?

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

本文链接:https://www.f2er.com/3017061.html

大家都在问