是否有可能返回record option
从 F# 到 C# 的值作为空值?我想将一些逻辑封装在 F# 程序集中,并尽可能多地隐藏在外观后面,“对 C# 来说更自然”。这是一些综合示例:
type Data = { DataField1: int; DataField2: string }
返回 C# 的代码如下所示:
type SomeFacade() =
let data = Some { DataField1 = 1; DataField2 = "hello" }
member x.GetData() = if Option.isSome data then Option.get data else null
但不允许使用空值。
- 我可以尝试使用
[<AllowNullLiteral>]
属性,但不能用于记录类型。
- 我可以用
Class
代替Record
但在 F# 内部使用它会更复杂,因为大部分工作应该在 F# 部分内完成。我喜欢通过复制另一个记录值来创建记录值的极其方便的方法with
关键词。
- 甚至可以使用
Data
作为 F# 程序集中的记录并将其转换为某个中间类DataClass
当暴露于 C# 程序集时,但看起来很尴尬。
有什么解决办法吗? (我不会在 F# 代码中使用空值,但我想将空值返回给 C# 代码)。
对于记录类型,
Operators.Unchecked.defaultof<Data>
is null
(刚刚使用 fsi 进行测试)
这可能是最简单的解决方案
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)