C#到F#Interop:如何在F#函数类型签名中指定C#方法的可选参数?

Sco*_*ott 4 c# f# interop

我在一些C#代码中有以下方法:

Qux MyFunc(Foo foo, Bar bar, int baz = 1);
Run Code Online (Sandbox Code Playgroud)

我想将它添加为我的新F#Record类型的字段.我将稍后将C#函数分配给我的记录字段,使用F#代码.

如果我忽略了最终参数baz的默认属性,那么我的类型将如下所示:

type MyType = {
    MyFunc: Foo * Bar * int -> Qux
}
Run Code Online (Sandbox Code Playgroud)

但是,因为我们有可选的C#参数,所以我想反映一下.我已尝试使用此处提到的Optional属性,但它不起作用:

type MyType = {
    MyFunc: Foo * Bar * [<Optional;DefaultParameterValue(null)>] int -> Qux
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过其他组合,例如问号前缀?baz.

这样做的正确方法是什么(如果可能的话)?

更新和摘要

虽然这可能做到这一点类型成员,它是不是能够做到这一点的一个值(录音).我正在使用F#3.1,所以将来可能会这样.

为了公平地奖励积分,我将赞成@ Daniel-Fabian,他确认了这种情况,并将@ Mark-Seemann的解决方案作为答案,因为虽然这不是我想要的答案,但它解决了我的问题.问题.

Dan*_*ian 5

您使用?for可选参数编写签名.

member this.MyFunc (foo, bar, ?baz) = Qux
Run Code Online (Sandbox Code Playgroud)

或只是签名

abstract member MyFunc : Foo * Bar * [<OptionalArgument>] baz : int option -> Qux
Run Code Online (Sandbox Code Playgroud)

同样也写在http://msdn.microsoft.com/en-us/library/dd233213.aspx中.但是,它不适用于您的情况,因为可选参数只允许键入成员而不是值.