我希望在F#中编写一个函数,将以下类型签名对C#公开:
在F#中,我尝试写成了以下代码:
当然,这些在F#中是等效的,但在C#中却非常不同。我该怎么做才能得到我想要的C#呢?(F# 2.0.0.0)
作为一个快速解决方法,我将我的F#重写为:
然后我只需在C#中使用
public static FSharpFunc<FSharpFunc<Unit,Unit>,Unit> foo(Action<Action> f)
在F#中,我尝试写成了以下代码:
let foo (f : Action<Action>) : ((unit -> unit) -> unit) = ...
但是这将产生C#签名:
public static void foo(Action<Action> f, FSharpFunc<Unit,Unit> x)
F#将我的代码等同对待:
let foo (f : Action<Action>) (g : unit -> unit) : unit = ...
当然,这些在F#中是等效的,但在C#中却非常不同。我该怎么做才能得到我想要的C#呢?(F# 2.0.0.0)
作为一个快速解决方法,我将我的F#重写为:
let foo (f : Action<Action>) ((unit -> unit) -> unit)[] = ...
然后我只需在C#中使用
Head
。
ignore ()
,但只写()
似乎也可以!如果你最终转向 F#,那么我想这没问题(但我会为其他人留下警告)。顺便恭喜你将 C# 部分转移到 F#! - Tomas Petricekid <| fun f -> ...
的语法可能比使用ignore
或分号略好一些。但实际上,任何东西都可以 - 只要编译器不会立即看到包含fun
的let
。 - Tomas Petricek