只是为了澄清 - 较短的版本应该是正确的:
bar.Ready.Add(fun msg -> System.Console.WriteLine(msg))
Run Code Online (Sandbox Code Playgroud)
因为F#不会自动将lambda函数转换为委托 - 但是有一个带有函数的Add方法.然后可以更简单地编写这样的代码:
bar.Ready.Add(System.Console.WriteLine)
Run Code Online (Sandbox Code Playgroud)
因为F#允许您使用.NET成员作为一等函数.
试试这个 -
bar.Ready.AddHandler(new Agent.ReadyHandler (fun sender msg -> System.Console.WriteLine(msg)))
Run Code Online (Sandbox Code Playgroud)
我已经玩过很多次了,这就是有效的代码。
bar.add_Ready(fun msg -> Console.WriteLine(msg))
Run Code Online (Sandbox Code Playgroud)
我不知道它在理论上有多正确,但它工作得很好。
任何人都可以确认它是正确的吗?