gpt4 book ai didi

C# 到 F# 互操作 : How to specify a C# method's optional parameter in F# function type signature?

转载 作者:太空狗 更新时间:2023-10-30 00:31:49 26 4
gpt4 key购买 nike

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

Qux MyFunc(Foo foo, Bar bar, int baz = 1);

我想将它作为一个字段添加到我的新 F# 记录类型中。稍后我将使用 F# 代码将 C# 函数分配到我的记录字段。

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

type MyType = {
MyFunc: Foo * Bar * int -> Qux
}

但是,因为我们有可选的 C# 参数,所以我想反射(reflect)一下。我尝试使用提到的可选属性 here ,但它不起作用:

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

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

执行此操作的正确方法是什么(如果可能的话)?

更新和总结

虽然可以对类型成员执行此操作,但不能对值(记录)执行此操作。我使用的是 F# 3.1,所以这可能在未来成为可能。

为了公平奖励积分,我将投票给确认是这种情况的@Daniel-Fabian,并将@Mark-Seemann 的解决方法标记为答案,因为虽然这不是我正在寻找的答案,它解决了我的问题。

最佳答案

您使用 ? 为可选参数编​​写签名。

member this.MyFunc (foo, bar, ?baz) = Qux

或者只是签名

abstract member MyFunc : Foo * Bar * [<OptionalArgument>] baz : int option -> Qux

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

关于C# 到 F# 互操作 : How to specify a C# method's optional parameter in F# function type signature?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22397878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com